<!DOCTYPE html><html><head>
      <title>concurrent</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <link rel="stylesheet" href="file:///C:\Users\Python\.vscode\extensions\shd101wyy.markdown-preview-enhanced-0.4.3\node_modules\@shd101wyy\mume\dependencies\katex\katex.min.css">
      
      

      
      
      
      
      
      

      <style>
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*="language-"],
pre[class*="language-"] {
  color: #333;
  background: none;
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*="language-"] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) > code[class*="language-"] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}

/* highlight */
pre[data-line] {
  position: relative;
  padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;
  display: block;
  width: 100%;
}

pre[data-line] .line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: hsla(24, 20%, 50%,.08);
  background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}

pre[data-line] .line-highlight:before, 
pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-start);
  position: absolute;
  top: .4em;
  left: .6em;
  min-width: 1em;
  padding: 0 .5em;
  background-color: hsla(24, 20%, 50%,.4);
  color: hsl(24, 20%, 95%);
  font: bold 65%/1.5 sans-serif;
  text-align: center;
  vertical-align: .3em;
  border-radius: 999px;
  text-shadow: none;
  box-shadow: 0 1px white;
}

pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-end);
  top: auto;
  bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      </style>
    </head>
    <body for="html-export">
      <div class="mume markdown-preview  ">
      <h1>&#x5E76;&#x53D1;&#x7F16;&#x7A0B;</h1>
<table>
<thead>
<tr>
<th>Tedu Python &#x6559;&#x5B66;&#x90E8;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author&#xFF1A;&#x5415;&#x6CFD;</td>
</tr>
</tbody>
</table>
<hr>
<ul>
<li><a href="#%E5%A4%9A%E4%BB%BB%E5%8A%A1%E7%BC%96%E7%A8%8B">&#x591A;&#x4EFB;&#x52A1;&#x7F16;&#x7A0B;</a></li>
<li><a href="#%E8%BF%9B%E7%A8%8Bprocess">&#x8FDB;&#x7A0B;&#xFF08;process&#xFF09;</a>
<ul>
<li><a href="#%E8%BF%9B%E7%A8%8B%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80">&#x8FDB;&#x7A0B;&#x7406;&#x8BBA;&#x57FA;&#x7840;</a></li>
</ul>
</li>
<li><a href="#%E5%9F%BA%E4%BA%8Efork%E7%9A%84%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B">&#x57FA;&#x4E8E;fork&#x7684;&#x591A;&#x8FDB;&#x7A0B;&#x7F16;&#x7A0B;</a>
<ul>
<li><a href="#fork%E4%BD%BF%E7%94%A8">fork&#x4F7F;&#x7528;</a></li>
<li><a href="#%E8%BF%9B%E7%A8%8B%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0">&#x8FDB;&#x7A0B;&#x76F8;&#x5173;&#x51FD;&#x6570;</a></li>
<li><a href="#%E5%AD%A4%E5%84%BF%E5%92%8C%E5%83%B5%E5%B0%B8">&#x5B64;&#x513F;&#x548C;&#x50F5;&#x5C38;</a></li>
<li><a href="#%E7%BE%A4%E8%81%8A%E8%81%8A%E5%A4%A9%E5%AE%A4">&#x7FA4;&#x804A;&#x804A;&#x5929;&#x5BA4;</a></li>
</ul>
</li>
<li><a href="#multiprocessing-%E6%A8%A1%E5%9D%97%E5%88%9B%E5%BB%BA%E8%BF%9B%E7%A8%8B">multiprocessing &#x6A21;&#x5757;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;</a>
<ul>
<li><a href="#%E8%BF%9B%E7%A8%8B%E5%88%9B%E5%BB%BA%E6%96%B9%E6%B3%95">&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x65B9;&#x6CD5;</a></li>
<li><a href="#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%BF%9B%E7%A8%8B%E7%B1%BB">&#x81EA;&#x5B9A;&#x4E49;&#x8FDB;&#x7A0B;&#x7C7B;</a></li>
<li><a href="#%E8%BF%9B%E7%A8%8B%E6%B1%A0%E5%AE%9E%E7%8E%B0">&#x8FDB;&#x7A0B;&#x6C60;&#x5B9E;&#x73B0;</a></li>
</ul>
</li>
<li><a href="#%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1ipc">&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#xFF08;IPC&#xFF09;</a>
<ul>
<li><a href="#%E7%AE%A1%E9%81%93%E9%80%9A%E4%BF%A1pipe">&#x7BA1;&#x9053;&#x901A;&#x4FE1;(Pipe)</a></li>
<li><a href="#%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97">&#x6D88;&#x606F;&#x961F;&#x5217;</a></li>
<li><a href="#%E5%85%B1%E4%BA%AB%E5%86%85%E5%AD%98">&#x5171;&#x4EAB;&#x5185;&#x5B58;</a></li>
<li><a href="#%E4%BF%A1%E5%8F%B7%E9%87%8F%E4%BF%A1%E5%8F%B7%E7%81%AF%E9%9B%86">&#x4FE1;&#x53F7;&#x91CF;&#xFF08;&#x4FE1;&#x53F7;&#x706F;&#x96C6;&#xFF09;</a></li>
</ul>
</li>
<li><a href="#%E7%BA%BF%E7%A8%8B%E7%BC%96%E7%A8%8Bthread">&#x7EBF;&#x7A0B;&#x7F16;&#x7A0B;&#xFF08;Thread&#xFF09;</a>
<ul>
<li><a href="#%E7%BA%BF%E7%A8%8B%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5">&#x7EBF;&#x7A0B;&#x57FA;&#x672C;&#x6982;&#x5FF5;</a></li>
<li><a href="#threading%E6%A8%A1%E5%9D%97%E5%88%9B%E5%BB%BA%E7%BA%BF%E7%A8%8B">threading&#x6A21;&#x5757;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;</a></li>
<li><a href="#%E7%BA%BF%E7%A8%8B%E5%AF%B9%E8%B1%A1%E5%B1%9E%E6%80%A7">&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;&#x5C5E;&#x6027;</a></li>
<li><a href="#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BA%BF%E7%A8%8B%E7%B1%BB">&#x81EA;&#x5B9A;&#x4E49;&#x7EBF;&#x7A0B;&#x7C7B;</a></li>
</ul>
</li>
<li><a href="#%E5%90%8C%E6%AD%A5%E4%BA%92%E6%96%A5">&#x540C;&#x6B65;&#x4E92;&#x65A5;</a>
<ul>
<li><a href="#%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E6%96%B9%E6%B3%95">&#x7EBF;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x65B9;&#x6CD5;</a></li>
<li><a href="#%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E4%BA%92%E6%96%A5%E6%96%B9%E6%B3%95">&#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x65B9;&#x6CD5;</a>
<ul>
<li><a href="#%E7%BA%BF%E7%A8%8Bevent">&#x7EBF;&#x7A0B;Event</a></li>
<li><a href="#%E7%BA%BF%E7%A8%8B%E9%94%81-lock">&#x7EBF;&#x7A0B;&#x9501; Lock</a></li>
</ul>
</li>
<li><a href="#%E6%AD%BB%E9%94%81%E5%8F%8A%E5%85%B6%E5%A4%84%E7%90%86">&#x6B7B;&#x9501;&#x53CA;&#x5176;&#x5904;&#x7406;</a></li>
</ul>
</li>
<li><a href="#python%E7%BA%BF%E7%A8%8Bgil">python&#x7EBF;&#x7A0B;GIL</a></li>
<li><a href="#%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E7%9A%84%E5%8C%BA%E5%88%AB%E8%81%94%E7%B3%BB">&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x7684;&#x533A;&#x522B;&#x8054;&#x7CFB;</a>
<ul>
<li><a href="#%E5%8C%BA%E5%88%AB%E8%81%94%E7%B3%BB">&#x533A;&#x522B;&#x8054;&#x7CFB;</a></li>
<li><a href="#%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF">&#x4F7F;&#x7528;&#x573A;&#x666F;</a></li>
<li><a href="#%E8%A6%81%E6%B1%82">&#x8981;&#x6C42;</a></li>
</ul>
</li>
<li><a href="#%E5%B9%B6%E5%8F%91%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9E%8B">&#x5E76;&#x53D1;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x6A21;&#x578B;</a>
<ul>
<li><a href="#%E5%B8%B8%E8%A7%81%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%9E%8B">&#x5E38;&#x89C1;&#x7F51;&#x7EDC;&#x6A21;&#x578B;</a></li>
<li><a href="#%E5%9F%BA%E4%BA%8Efork%E7%9A%84%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BD%91%E7%BB%9C%E5%B9%B6%E5%8F%91%E6%A8%A1%E5%9E%8B">&#x57FA;&#x4E8E;fork&#x7684;&#x591A;&#x8FDB;&#x7A0B;&#x7F51;&#x7EDC;&#x5E76;&#x53D1;&#x6A21;&#x578B;</a>
<ul>
<li><a href="#%E5%AE%9E%E7%8E%B0%E6%AD%A5%E9%AA%A4">&#x5B9E;&#x73B0;&#x6B65;&#x9AA4;</a></li>
</ul>
</li>
<li><a href="#%E5%9F%BA%E4%BA%8Ethreading%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%BD%91%E7%BB%9C%E5%B9%B6%E5%8F%91">&#x57FA;&#x4E8E;threading&#x7684;&#x591A;&#x7EBF;&#x7A0B;&#x7F51;&#x7EDC;&#x5E76;&#x53D1;</a>
<ul>
<li><a href="#%E5%AE%9E%E7%8E%B0%E6%AD%A5%E9%AA%A4-1">&#x5B9E;&#x73B0;&#x6B65;&#x9AA4;</a></li>
</ul>
</li>
<li><a href="#ftp-%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8">ftp &#x6587;&#x4EF6;&#x670D;&#x52A1;&#x5668;</a></li>
</ul>
</li>
<li><a href="#io%E5%B9%B6%E5%8F%91">IO&#x5E76;&#x53D1;</a>
<ul>
<li><a href="#io-%E5%88%86%E7%B1%BB">IO &#x5206;&#x7C7B;</a>
<ul>
<li><a href="#%E9%98%BB%E5%A1%9Eio">&#x963B;&#x585E;IO</a></li>
<li><a href="#%E9%9D%9E%E9%98%BB%E5%A1%9Eio">&#x975E;&#x963B;&#x585E;IO</a></li>
</ul>
</li>
<li><a href="#io%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8">IO&#x591A;&#x8DEF;&#x590D;&#x7528;</a>
<ul>
<li><a href="#select-%E6%96%B9%E6%B3%95">select &#x65B9;&#x6CD5;</a></li>
</ul>
</li>
<li><a href="#%E6%89%A9%E5%B1%95-%E4%BD%8D%E8%BF%90%E7%AE%97">@@&#x6269;&#x5C55;: &#x4F4D;&#x8FD0;&#x7B97;</a>
<ul>
<li><a href="#poll%E6%96%B9%E6%B3%95">poll&#x65B9;&#x6CD5;</a></li>
<li><a href="#epoll%E6%96%B9%E6%B3%95">epoll&#x65B9;&#x6CD5;</a></li>
</ul>
</li>
<li><a href="#%E5%8D%8F%E7%A8%8B%E6%8A%80%E6%9C%AF">&#x534F;&#x7A0B;&#x6280;&#x672F;</a>
<ul>
<li><a href="#%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5">&#x57FA;&#x7840;&#x6982;&#x5FF5;</a></li>
<li><a href="#%E6%89%A9%E5%B1%95%E5%BB%B6%E4%BC%B8%E6%A0%87%E5%87%86%E5%BA%93%E5%8D%8F%E7%A8%8B%E7%9A%84%E5%AE%9E%E7%8E%B0">&#x6269;&#x5C55;&#x5EF6;&#x4F38;@&#x6807;&#x51C6;&#x5E93;&#x534F;&#x7A0B;&#x7684;&#x5B9E;&#x73B0;</a></li>
<li><a href="#%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8D%8F%E7%A8%8B%E6%A8%A1">&#x7B2C;&#x4E09;&#x65B9;&#x534F;&#x7A0B;&#x6A21;</a></li>
</ul>
</li>
<li><a href="#httpserver-v20">HTTPServer v2.0</a></li>
</ul>
</li>
</ul>
<h2 class="mume-header" id="%E5%A4%9A%E4%BB%BB%E5%8A%A1%E7%BC%96%E7%A8%8B">&#x591A;&#x4EFB;&#x52A1;&#x7F16;&#x7A0B;</h2>

<ol>
<li>
<p>&#x610F;&#x4E49;&#xFF1A; &#x5145;&#x5206;&#x5229;&#x7528;&#x8BA1;&#x7B97;&#x673A;CPU&#x7684;&#x591A;&#x6838;&#x8D44;&#x6E90;&#xFF0C;&#x540C;&#x65F6;&#x5904;&#x7406;&#x591A;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x4EFB;&#x52A1;&#xFF0C;&#x4EE5;&#x6B64;&#x63D0;&#x9AD8;&#x7A0B;&#x5E8F;&#x7684;&#x8FD0;&#x884C;&#x6548;&#x7387;&#x3002;</p>
</li>
<li>
<p>&#x5B9E;&#x73B0;&#x65B9;&#x6848; &#xFF1A;&#x591A;&#x8FDB;&#x7A0B; &#xFF0C; &#x591A;&#x7EBF;&#x7A0B;</p>
</li>
</ol>
<h2 class="mume-header" id="%E8%BF%9B%E7%A8%8Bprocess">&#x8FDB;&#x7A0B;&#xFF08;process&#xFF09;</h2>

<h3 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80">&#x8FDB;&#x7A0B;&#x7406;&#x8BBA;&#x57FA;&#x7840;</h3>

<ol>
<li>&#x5B9A;&#x4E49; &#xFF1A; &#x7A0B;&#x5E8F;&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x4E2D;&#x7684;&#x4E00;&#x6B21;&#x8FD0;&#x884C;&#x3002;</li>
</ol>
<blockquote>
<ul>
<li>&#x7A0B;&#x5E8F;&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x6267;&#x884C;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x662F;&#x9759;&#x6001;&#x7684;&#x5360;&#x6709;&#x78C1;&#x76D8;&#x3002;</li>
<li>&#x8FDB;&#x7A0B;&#x662F;&#x4E00;&#x4E2A;&#x52A8;&#x6001;&#x7684;&#x8FC7;&#x7A0B;&#x63CF;&#x8FF0;&#xFF0C;&#x5360;&#x6709;&#x8BA1;&#x7B97;&#x673A;&#x8FD0;&#x884C;&#x8D44;&#x6E90;&#xFF0C;&#x6709;&#x4E00;&#x5B9A;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#x3002;</li>
</ul>
</blockquote>
<ol start="2">
<li>&#x7CFB;&#x7EDF;&#x4E2D;&#x5982;&#x4F55;&#x4EA7;&#x751F;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;<br>
&#x3010;1&#x3011; &#x7528;&#x6237;&#x7A7A;&#x95F4;&#x901A;&#x8FC7;&#x8C03;&#x7528;&#x7A0B;&#x5E8F;&#x63A5;&#x53E3;&#x6216;&#x8005;&#x547D;&#x4EE4;&#x53D1;&#x8D77;&#x8BF7;&#x6C42;<br>
&#x3010;2&#x3011; &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x63A5;&#x6536;&#x7528;&#x6237;&#x8BF7;&#x6C42;&#xFF0C;&#x5F00;&#x59CB;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;<br>
&#x3010;3&#x3011; &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x8C03;&#x914D;&#x8BA1;&#x7B97;&#x673A;&#x8D44;&#x6E90;&#xFF0C;&#x786E;&#x5B9A;&#x8FDB;&#x7A0B;&#x72B6;&#x6001;&#x7B49;<br>
&#x3010;4&#x3011; &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5C06;&#x521B;&#x5EFA;&#x7684;&#x8FDB;&#x7A0B;&#x63D0;&#x4F9B;&#x7ED9;&#x7528;&#x6237;&#x4F7F;&#x7528;</li>
</ol>
<p><img src="img/linux.png" alt></p>
<ol start="3">
<li>&#x8FDB;&#x7A0B;&#x57FA;&#x672C;&#x6982;&#x5FF5;</li>
</ol>
<ul>
<li>
<p>cpu&#x65F6;&#x95F4;&#x7247;&#xFF1A;&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x5360;&#x6709;cpu&#x5185;&#x6838;&#x5219;&#x79F0;&#x8FD9;&#x4E2A;&#x8FDB;&#x7A0B;&#x5728;cpu&#x65F6;&#x95F4;&#x7247;&#x4E0A;&#x3002;</p>
</li>
<li>
<p>PCB(&#x8FDB;&#x7A0B;&#x63A7;&#x5236;&#x5757;)&#xFF1A;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x5F00;&#x8F9F;&#x7684;&#x4E00;&#x5757;&#x7A7A;&#x95F4;&#xFF0C;&#x7528;&#x4E8E;&#x5B58;&#x653E;&#x8FDB;&#x7A0B;&#x7684;&#x57FA;&#x672C;&#x4FE1;&#x606F;&#xFF0C;&#x4E5F;&#x7528;&#x4E8E;&#x7CFB;&#x7EDF;&#x67E5;&#x627E;&#x8BC6;&#x522B;&#x8FDB;&#x7A0B;&#x3002;</p>
</li>
<li>
<p>&#x8FDB;&#x7A0B;ID&#xFF08;PID&#xFF09;&#xFF1A; &#x7CFB;&#x7EDF;&#x4E3A;&#x6BCF;&#x4E2A;&#x8FDB;&#x7A0B;&#x5206;&#x914D;&#x7684;&#x4E00;&#x4E2A;&#x5927;&#x4E8E;0&#x7684;&#x6574;&#x6570;&#xFF0C;&#x4F5C;&#x4E3A;&#x8FDB;&#x7A0B;ID&#x3002;&#x6BCF;&#x4E2A;&#x8FDB;&#x7A0B;ID&#x4E0D;&#x91CD;&#x590D;&#x3002;</p>
<blockquote>
<p>Linux&#x67E5;&#x770B;&#x8FDB;&#x7A0B;ID &#xFF1A; ps -aux</p>
</blockquote>
</li>
<li>
<p>&#x7236;&#x5B50;&#x8FDB;&#x7A0B; &#xFF1A; &#x7CFB;&#x7EDF;&#x4E2D;&#x6BCF;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;(&#x9664;&#x4E86;&#x7CFB;&#x7EDF;&#x521D;&#x59CB;&#x5316;&#x8FDB;&#x7A0B;)&#x90FD;&#x6709;&#x552F;&#x4E00;&#x7684;&#x7236;&#x8FDB;&#x7A0B;&#xFF0C;&#x53EF;&#x4EE5;&#x6709;0&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x5B50;&#x8FDB;&#x7A0B;&#x3002;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x5173;&#x7CFB;&#x4FBF;&#x4E8E;&#x8FDB;&#x7A0B;&#x7BA1;&#x7406;&#x3002;</p>
</li>
</ul>
<blockquote>
<p>&#x67E5;&#x770B;&#x8FDB;&#x7A0B;&#x6811;&#xFF1A; pstree</p>
</blockquote>
<ul>
<li>
<p>&#x8FDB;&#x7A0B;&#x72B6;&#x6001;</p>
<ul>
<li>&#x4E09;&#x6001;<br>
&#x5C31;&#x7EEA;&#x6001; &#xFF1A; &#x8FDB;&#x7A0B;&#x5177;&#x5907;&#x6267;&#x884C;&#x6761;&#x4EF6;&#xFF0C;&#x7B49;&#x5F85;&#x5206;&#x914D;cpu&#x8D44;&#x6E90;<br>
&#x8FD0;&#x884C;&#x6001; &#xFF1A; &#x8FDB;&#x7A0B;&#x5360;&#x6709;cpu&#x65F6;&#x95F4;&#x7247;&#x6B63;&#x5728;&#x8FD0;&#x884C;<br>
&#x7B49;&#x5F85;&#x6001; &#xFF1A; &#x8FDB;&#x7A0B;&#x6682;&#x65F6;&#x505C;&#x6B62;&#x8FD0;&#x884C;&#xFF0C;&#x8BA9;&#x51FA;cpu</li>
</ul>
</li>
</ul>
<p><img src="img/4_3%E6%80%81.png" alt></p>
<ul>
<li>&#x4E94;&#x6001; (&#x5728;&#x4E09;&#x6001;&#x57FA;&#x7840;&#x4E0A;&#x589E;&#x52A0;&#x65B0;&#x5EFA;&#x548C;&#x7EC8;&#x6B62;)<br>
&#x65B0;&#x5EFA; &#xFF1A; &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF0C;&#x83B7;&#x53D6;&#x8D44;&#x6E90;&#x7684;&#x8FC7;&#x7A0B;<br>
&#x7EC8;&#x6B62; &#xFF1A; &#x8FDB;&#x7A0B;&#x7ED3;&#x675F;&#xFF0C;&#x91CA;&#x653E;&#x8D44;&#x6E90;&#x7684;&#x8FC7;&#x7A0B;</li>
</ul>
<p><img src="img/4_5%E6%80%81.png" alt></p>
<ul>
<li>&#x72B6;&#x6001;&#x67E5;&#x770B;&#x547D;&#x4EE4; &#xFF1A; ps -aux  --&gt; STAT&#x5217;</li>
</ul>
<blockquote>
<pre class="language-text">  		S &#x7B49;&#x5F85;&#x6001;
</pre>
<p>R &#x6267;&#x884C;&#x6001;<br>
Z &#x50F5;&#x5C38;</p>
</blockquote>
<blockquote>
<pre class="language-text">  		`+` &#x524D;&#x53F0;&#x8FDB;&#x7A0B;
</pre>
<p>l   &#x6709;&#x591A;&#x7EBF;&#x7A0B;&#x7684;</p>
</blockquote>
<ul>
<li>&#x8FDB;&#x7A0B;&#x7684;&#x8FD0;&#x884C;&#x7279;&#x5F81;<br>
&#x3010;1&#x3011; &#x591A;&#x8FDB;&#x7A0B;&#x53EF;&#x4EE5;&#x66F4;&#x5145;&#x5206;&#x4F7F;&#x7528;&#x8BA1;&#x7B97;&#x673A;&#x591A;&#x6838;&#x8D44;&#x6E90;<br>
&#x3010;2&#x3011; &#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x8FD0;&#x884C;&#x4E92;&#x4E0D;&#x5F71;&#x54CD;&#xFF0C;&#x5404;&#x81EA;&#x72EC;&#x7ACB;<br>
&#x3010;3&#x3011; &#x6BCF;&#x4E2A;&#x8FDB;&#x7A0B;&#x62E5;&#x6709;&#x72EC;&#x7ACB;&#x7684;&#x7A7A;&#x95F4;&#xFF0C;&#x5404;&#x81EA;&#x4F7F;&#x7528;&#x81EA;&#x5DF1;&#x7A7A;&#x95F4;&#x8D44;&#x6E90;</li>
</ul>
<blockquote>
<p>&#x9762;&#x8BD5;&#x8981;&#x6C42;</p>
<blockquote>
<ol>
<li>&#x4EC0;&#x4E48;&#x662F;&#x8FDB;&#x7A0B;&#xFF0C;&#x8FDB;&#x7A0B;&#x548C;&#x7A0B;&#x5E8F;&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;</li>
<li>&#x8FDB;&#x7A0B;&#x6709;&#x54EA;&#x4E9B;&#x72B6;&#x6001;&#xFF0C;&#x72B6;&#x6001;&#x4E4B;&#x95F4;&#x5982;&#x4F55;&#x8F6C;&#x5316;</li>
</ol>
</blockquote>
</blockquote>
<h2 class="mume-header" id="%E5%9F%BA%E4%BA%8Efork%E7%9A%84%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B">&#x57FA;&#x4E8E;fork&#x7684;&#x591A;&#x8FDB;&#x7A0B;&#x7F16;&#x7A0B;</h2>

<h3 class="mume-header" id="fork%E4%BD%BF%E7%94%A8">fork&#x4F7F;&#x7528;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day7/fork.py</strong></em><br>
<em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day7/fork1.py</strong></em></p>
<blockquote>
<p>pid = os.fork()<br>
&#x529F;&#x80FD;&#xFF1A; &#x521B;&#x5EFA;&#x65B0;&#x7684;&#x8FDB;&#x7A0B;<br>
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x6574;&#x6570;&#xFF0C;&#x5982;&#x679C;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x5931;&#x8D25;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x8D1F;&#x6570;&#xFF0C;&#x5982;&#x679C;&#x6210;&#x529F;&#x5219;&#x5728;&#x539F;&#x6709;&#x8FDB;&#x7A0B;&#x4E2D;&#x8FD4;&#x56DE;&#x65B0;&#x8FDB;&#x7A0B;&#x7684;PID&#xFF0C;&#x5728;&#x65B0;&#x8FDB;&#x7A0B;&#x4E2D;&#x8FD4;&#x56DE;0</p>
</blockquote>
<blockquote>
<p>&#x6CE8;&#x610F;</p>
<blockquote>
<ul>
<li>&#x5B50;&#x8FDB;&#x7A0B;&#x4F1A;&#x590D;&#x5236;&#x7236;&#x8FDB;&#x7A0B;&#x5168;&#x90E8;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF0C;&#x4ECE;fork&#x4E0B;&#x4E00;&#x53E5;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x3002;</li>
<li>&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x5404;&#x81EA;&#x72EC;&#x7ACB;&#x8FD0;&#x884C;&#xFF0C;&#x8FD0;&#x884C;&#x987A;&#x5E8F;&#x4E0D;&#x4E00;&#x5B9A;&#x3002;</li>
<li>&#x5229;&#x7528;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;fork&#x8FD4;&#x56DE;&#x503C;&#x7684;&#x533A;&#x522B;&#xFF0C;&#x914D;&#x5408;if&#x7ED3;&#x6784;&#x8BA9;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x6267;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x5185;&#x5BB9;&#x51E0;&#x4E4E;&#x662F;&#x56FA;&#x5B9A;&#x642D;&#x914D;&#x3002;</li>
<li>&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x6709;&#x5404;&#x81EA;&#x7279;&#x6709;&#x7279;&#x5F81;&#x6BD4;&#x5982;PID PCB &#x547D;&#x4EE4;&#x96C6;&#x7B49;&#x3002;</li>
<li>&#x7236;&#x8FDB;&#x7A0B;fork&#x4E4B;&#x524D;&#x5F00;&#x8F9F;&#x7684;&#x7A7A;&#x95F4;&#x5B50;&#x8FDB;&#x7A0B;&#x540C;&#x6837;&#x62E5;&#x6709;&#xFF0C;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x5BF9;&#x5404;&#x81EA;&#x7A7A;&#x95F4;&#x7684;&#x64CD;&#x4F5C;&#x4E0D;&#x4F1A;&#x76F8;&#x4E92;&#x5F71;&#x54CD;&#x3002;</li>
</ul>
</blockquote>
</blockquote>
<h3 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0">&#x8FDB;&#x7A0B;&#x76F8;&#x5173;&#x51FD;&#x6570;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day7/get_pid.py</strong></em><br>
<em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day7/exit.py</strong></em></p>
<blockquote>
<p>os.getpid()<br>
&#x529F;&#x80FD;&#xFF1A; &#x83B7;&#x53D6;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;PID&#x503C;<br>
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; &#x8FD4;&#x56DE;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x7684;PID</p>
</blockquote>
<blockquote>
<p>os.getppid()<br>
&#x529F;&#x80FD;&#xFF1A; &#x83B7;&#x53D6;&#x7236;&#x8FDB;&#x7A0B;&#x7684;PID&#x53F7;<br>
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; &#x8FD4;&#x56DE;&#x7236;&#x8FDB;&#x7A0B;PID</p>
</blockquote>
<blockquote>
<p>os._exit(status)<br>
&#x529F;&#x80FD;: &#x7ED3;&#x675F;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;<br>
&#x53C2;&#x6570;&#xFF1A;&#x8FDB;&#x7A0B;&#x7684;&#x7EC8;&#x6B62;&#x72B6;&#x6001;</p>
</blockquote>
<blockquote>
<p>sys.exit([status])<br>
&#x529F;&#x80FD;&#xFF1A;&#x9000;&#x51FA;&#x8FDB;&#x7A0B;<br>
&#x53C2;&#x6570;&#xFF1A;&#x6574;&#x6570; &#x8868;&#x793A;&#x9000;&#x51FA;&#x72B6;&#x6001;<br>
&#x5B57;&#x7B26;&#x4E32; &#x8868;&#x793A;&#x9000;&#x51FA;&#x65F6;&#x6253;&#x5370;&#x5185;&#x5BB9;</p>
</blockquote>
<h3 class="mume-header" id="%E5%AD%A4%E5%84%BF%E5%92%8C%E5%83%B5%E5%B0%B8">&#x5B64;&#x513F;&#x548C;&#x50F5;&#x5C38;</h3>

<ol>
<li>&#x5B64;&#x513F;&#x8FDB;&#x7A0B; &#xFF1A; &#x7236;&#x8FDB;&#x7A0B;&#x5148;&#x4E8E;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#xFF0C;&#x6B64;&#x65F6;&#x5B50;&#x8FDB;&#x7A0B;&#x6210;&#x4E3A;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x3002;</li>
</ol>
<blockquote>
<p>&#x7279;&#x70B9;&#xFF1A; &#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x4F1A;&#x88AB;&#x7CFB;&#x7EDF;&#x8FDB;&#x7A0B;&#x6536;&#x517B;&#xFF0C;&#x6B64;&#x65F6;&#x7CFB;&#x7EDF;&#x8FDB;&#x7A0B;&#x5C31;&#x4F1A;&#x6210;&#x4E3A;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x65B0;&#x7684;&#x7236;&#x8FDB;&#x7A0B;&#xFF0C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x8BE5;&#x8FDB;&#x7A0B;&#x4F1A;&#x81EA;&#x52A8;&#x5904;&#x7406;&#x3002;</p>
</blockquote>
<ol start="2">
<li>&#x50F5;&#x5C38;&#x8FDB;&#x7A0B; &#xFF1A; &#x5B50;&#x8FDB;&#x7A0B;&#x5148;&#x4E8E;&#x7236;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#xFF0C;&#x7236;&#x8FDB;&#x7A0B;&#x53C8;&#x6CA1;&#x6709;&#x5904;&#x7406;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;&#x9000;&#x51FA;&#x72B6;&#x6001;&#xFF0C;&#x6B64;&#x65F6;&#x5B50;&#x8FDB;&#x7A0B;&#x5C31;&#x4F1A;&#x79F0;&#x4E3A;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x3002;</li>
</ol>
<blockquote>
<p>&#x7279;&#x70B9;&#xFF1A; &#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x867D;&#x7136;&#x7ED3;&#x675F;&#xFF0C;&#x4F46;&#x662F;&#x4F1A;&#x5B58;&#x7559;&#x90E8;&#x5206;PCB&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x5927;&#x91CF;&#x7684;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4F1A;&#x6D6A;&#x8D39;&#x7CFB;&#x7EDF;&#x7684;&#x5185;&#x5B58;&#x8D44;&#x6E90;&#x3002;</p>
</blockquote>
<ol start="3">
<li>&#x5982;&#x4F55;&#x907F;&#x514D;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4EA7;&#x751F;</li>
</ol>
<ul>
<li>&#x4F7F;&#x7528;wait&#x51FD;&#x6570;&#x5904;&#x7406;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;</li>
</ul>
<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day7/wait.py</strong></em></p>
<pre class="language-text">	```		
	pid,status = os.wait()
	&#x529F;&#x80FD;&#xFF1A;&#x5728;&#x7236;&#x8FDB;&#x7A0B;&#x4E2D;&#x963B;&#x585E;&#x7B49;&#x5F85;&#x5904;&#x7406;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;
	&#x8FD4;&#x56DE;&#x503C;&#xFF1A; pid  &#x9000;&#x51FA;&#x7684;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;PID
		status  &#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x72B6;&#x6001;
	
	```
</pre>
<ul>
<li>
<p>&#x521B;&#x5EFA;&#x4E8C;&#x7EA7;&#x5B50;&#x8FDB;&#x7A0B;&#x5904;&#x7406;&#x50F5;&#x5C38;</p>
<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day7/child.py</strong></em></p>
</li>
</ul>
<pre class="language-text">&#x3010;1&#x3011; &#x7236;&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x5B50;&#x8FDB;&#x7A0B;&#xFF0C;&#x7B49;&#x5F85;&#x56DE;&#x6536;&#x5B50;&#x8FDB;&#x7A0B;
&#x3010;2&#x3011; &#x5B50;&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x4E8C;&#x7EA7;&#x5B50;&#x8FDB;&#x7A0B;&#x7136;&#x540E;&#x9000;&#x51FA;
&#x3010;3&#x3011; &#x4E8C;&#x7EA7;&#x5B50;&#x8FDB;&#x7A0B;&#x79F0;&#x4E3A;&#x5B64;&#x513F;&#xFF0C;&#x548C;&#x539F;&#x6765;&#x7236;&#x8FDB;&#x7A0B;&#x4E00;&#x540C;&#x6267;&#x884C;&#x4E8B;&#x4EF6;
</pre>
<ul>
<li>
<p>&#x901A;&#x8FC7;&#x4FE1;&#x53F7;&#x5904;&#x7406;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;</p>
<blockquote>
<p>&#x539F;&#x7406;&#xFF1A; &#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x65F6;&#x4F1A;&#x53D1;&#x9001;&#x4FE1;&#x53F7;&#x7ED9;&#x7236;&#x8FDB;&#x7A0B;&#xFF0C;&#x5982;&#x679C;&#x7236;&#x8FDB;&#x7A0B;&#x5FFD;&#x7565;&#x5B50;&#x8FDB;&#x7A0B;&#x4FE1;&#x53F7;&#xFF0C;&#x5219;&#x7CFB;&#x7EDF;&#x5C31;&#x4F1A;&#x81EA;&#x52A8;&#x5904;&#x7406;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x3002;</p>
</blockquote>
<blockquote>
<p>&#x65B9;&#x6CD5;&#xFF1A; &#x4F7F;&#x7528;signal&#x6A21;&#x5757;&#x5728;&#x7236;&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x5B50;&#x8FDB;&#x7A0B;&#x524D;&#x5199;&#x5982;&#x4E0B;&#x8BED;&#x53E5; &#xFF1A;</p>
</blockquote>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">import</span> signal
signal<span class="token punctuation">.</span>signal<span class="token punctuation">(</span>signal<span class="token punctuation">.</span>SIGCHLD<span class="token punctuation">,</span>signal<span class="token punctuation">.</span>SIG_IGN<span class="token punctuation">)</span>
</pre><blockquote>
<p>&#x7279;&#x70B9; &#xFF1A; &#x975E;&#x963B;&#x585E;&#xFF0C;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD;&#x7236;&#x8FDB;&#x7A0B;&#x8FD0;&#x884C;&#x3002;&#x53EF;&#x4EE5;&#x5904;&#x7406;&#x6240;&#x6709;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;</p>
</blockquote>
</li>
</ul>
<h3 class="mume-header" id="%E7%BE%A4%E8%81%8A%E8%81%8A%E5%A4%A9%E5%AE%A4">&#x7FA4;&#x804A;&#x804A;&#x5929;&#x5BA4;</h3>

<blockquote>
<p>&#x529F;&#x80FD; &#xFF1A; &#x7C7B;&#x4F3C;qq&#x7FA4;&#x529F;&#x80FD;<br>
&#x3010;1&#x3011; &#x6709;&#x4EBA;&#x8FDB;&#x5165;&#x804A;&#x5929;&#x5BA4;&#x9700;&#x8981;&#x8F93;&#x5165;&#x59D3;&#x540D;&#xFF0C;&#x59D3;&#x540D;&#x4E0D;&#x80FD;&#x91CD;&#x590D;<br>
&#x3010;2&#x3011; &#x6709;&#x4EBA;&#x8FDB;&#x5165;&#x804A;&#x5929;&#x5BA4;&#x65F6;&#xFF0C;&#x5176;&#x4ED6;&#x4EBA;&#x4F1A;&#x6536;&#x5230;&#x901A;&#x77E5;&#xFF1A;xxx &#x8FDB;&#x5165;&#x4E86;&#x804A;&#x5929;&#x5BA4;<br>
&#x3010;3&#x3011; &#x4E00;&#x4E2A;&#x4EBA;&#x53D1;&#x6D88;&#x606F;&#xFF0C;&#x5176;&#x4ED6;&#x4EBA;&#x4F1A;&#x6536;&#x5230;&#xFF1A;xxx &#xFF1A; xxxxxxxxxxx<br>
&#x3010;4&#x3011; &#x6709;&#x4EBA;&#x9000;&#x51FA;&#x804A;&#x5929;&#x5BA4;&#xFF0C;&#x5219;&#x5176;&#x4ED6;&#x4EBA;&#x4E5F;&#x4F1A;&#x6536;&#x5230;&#x901A;&#x77E5;:xxx&#x9000;&#x51FA;&#x4E86;&#x804A;&#x5929;&#x5BA4;<br>
&#x3010;5&#x3011; &#x6269;&#x5C55;&#x529F;&#x80FD;&#xFF1A;&#x670D;&#x52A1;&#x5668;&#x53EF;&#x4EE5;&#x5411;&#x6240;&#x6709;&#x7528;&#x6237;&#x53D1;&#x9001;&#x516C;&#x544A;:&#x7BA1;&#x7406;&#x5458;&#x6D88;&#x606F;&#xFF1A; xxxxxxxxx</p>
</blockquote>
<h2 class="mume-header" id="multiprocessing-%E6%A8%A1%E5%9D%97%E5%88%9B%E5%BB%BA%E8%BF%9B%E7%A8%8B">multiprocessing &#x6A21;&#x5757;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;</h2>

<h3 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E5%88%9B%E5%BB%BA%E6%96%B9%E6%B3%95">&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x65B9;&#x6CD5;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day8/process1.py</strong></em><br>
<em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day8/process2.py</strong></em><br>
<em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day8/process3.py</strong></em></p>
<ol>
<li>
<p>&#x6D41;&#x7A0B;&#x7279;&#x70B9;<br>
&#x3010;1&#x3011; &#x5C06;&#x9700;&#x8981;&#x5B50;&#x8FDB;&#x7A0B;&#x6267;&#x884C;&#x7684;&#x4E8B;&#x4EF6;&#x5C01;&#x88C5;&#x4E3A;&#x51FD;&#x6570;<br>
&#x3010;2&#x3011; &#x901A;&#x8FC7;&#x6A21;&#x5757;&#x7684;Process&#x7C7B;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x5BF9;&#x8C61;&#xFF0C;&#x5173;&#x8054;&#x51FD;&#x6570;<br>
&#x3010;3&#x3011; &#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8FDB;&#x7A0B;&#x5BF9;&#x8C61;&#x8BBE;&#x7F6E;&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;&#x53CA;&#x5C5E;&#x6027;<br>
&#x3010;4&#x3011; &#x901A;&#x8FC7;&#x8FDB;&#x7A0B;&#x5BF9;&#x8C61;&#x8C03;&#x7528;start&#x542F;&#x52A8;&#x8FDB;&#x7A0B;<br>
&#x3010;5&#x3011; &#x901A;&#x8FC7;&#x8FDB;&#x7A0B;&#x5BF9;&#x8C61;&#x8C03;&#x7528;join&#x56DE;&#x6536;&#x8FDB;&#x7A0B;</p>
</li>
<li>
<p>&#x57FA;&#x672C;&#x63A5;&#x53E3;&#x4F7F;&#x7528;</p>
</li>
</ol>
<pre data-role="codeBlock" data-info="python" class="language-python">Process<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD; &#xFF1A; &#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x5BF9;&#x8C61;
&#x53C2;&#x6570; &#xFF1A; target &#x7ED1;&#x5B9A;&#x8981;&#x6267;&#x884C;&#x7684;&#x76EE;&#x6807;&#x51FD;&#x6570; 
	args &#x5143;&#x7EC4;&#xFF0C;&#x7528;&#x4E8E;&#x7ED9;target&#x51FD;&#x6570;&#x4F4D;&#x7F6E;&#x4F20;&#x53C2;
	kwargs &#x5B57;&#x5178;&#xFF0C;&#x7ED9;target&#x51FD;&#x6570;&#x952E;&#x503C;&#x4F20;&#x53C2;
</pre><pre data-role="codeBlock" data-info="python" class="language-python">p<span class="token punctuation">.</span>start<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD; &#xFF1A; &#x542F;&#x52A8;&#x8FDB;&#x7A0B;
</pre><blockquote>
<p>&#x6CE8;&#x610F;:&#x542F;&#x52A8;&#x8FDB;&#x7A0B;&#x6B64;&#x65F6;target&#x7ED1;&#x5B9A;&#x51FD;&#x6570;&#x5F00;&#x59CB;&#x6267;&#x884C;&#xFF0C;&#x8BE5;&#x51FD;&#x6570;&#x4F5C;&#x4E3A;&#x5B50;&#x8FDB;&#x7A0B;&#x6267;&#x884C;&#x5185;&#x5BB9;&#xFF0C;&#x6B64;&#x65F6;&#x8FDB;&#x7A0B;&#x771F;&#x6B63;&#x88AB;&#x521B;&#x5EFA;</p>
</blockquote>
<pre data-role="codeBlock" data-info="python" class="language-python">p<span class="token punctuation">.</span>join<span class="token punctuation">(</span><span class="token punctuation">[</span>timeout<span class="token punctuation">]</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A;&#x963B;&#x585E;&#x7B49;&#x5F85;&#x56DE;&#x6536;&#x8FDB;&#x7A0B;
&#x53C2;&#x6570;&#xFF1A;&#x8D85;&#x65F6;&#x65F6;&#x95F4;
</pre><blockquote>
<p>&#x6CE8;&#x610F;</p>
<blockquote>
<ul>
<li>&#x4F7F;&#x7528;multiprocessing&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x540C;&#x6837;&#x662F;&#x5B50;&#x8FDB;&#x7A0B;&#x590D;&#x5236;&#x7236;&#x8FDB;&#x7A0B;&#x7A7A;&#x95F4;&#x4EE3;&#x7801;&#x6BB5;&#xFF0C;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x8FD0;&#x884C;&#x4E92;&#x4E0D;&#x5F71;&#x54CD;&#x3002;</li>
<li>&#x5B50;&#x8FDB;&#x7A0B;&#x53EA;&#x8FD0;&#x884C;target&#x7ED1;&#x5B9A;&#x7684;&#x51FD;&#x6570;&#x90E8;&#x5206;&#xFF0C;&#x5176;&#x4F59;&#x5185;&#x5BB9;&#x5747;&#x662F;&#x7236;&#x8FDB;&#x7A0B;&#x6267;&#x884C;&#x5185;&#x5BB9;&#x3002;</li>
<li>multiprocessing&#x4E2D;&#x7236;&#x8FDB;&#x7A0B;&#x5F80;&#x5F80;&#x53EA;&#x7528;&#x6765;&#x521B;&#x5EFA;&#x5B50;&#x8FDB;&#x7A0B;&#x56DE;&#x6536;&#x5B50;&#x8FDB;&#x7A0B;&#xFF0C;&#x5177;&#x4F53;&#x4E8B;&#x4EF6;&#x7531;&#x5B50;&#x8FDB;&#x7A0B;&#x5B8C;&#x6210;&#x3002;</li>
<li>multiprocessing&#x521B;&#x5EFA;&#x7684;&#x5B50;&#x8FDB;&#x7A0B;&#x4E2D;&#x65E0;&#x6CD5;&#x4F7F;&#x7528;&#x6807;&#x51C6;&#x8F93;&#x5165;</li>
</ul>
</blockquote>
</blockquote>
<ol start="3">
<li>&#x8FDB;&#x7A0B;&#x5BF9;&#x8C61;&#x5C5E;&#x6027;</li>
</ol>
<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day8/process_attr.py</strong></em></p>
<blockquote>
<p><a href="http://p.name">p.name</a>  &#x8FDB;&#x7A0B;&#x540D;&#x79F0;</p>
</blockquote>
<blockquote>
<p>p.pid   &#x5BF9;&#x5E94;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;PID&#x53F7;</p>
</blockquote>
<blockquote>
<p>p.is_alive() &#x67E5;&#x770B;&#x5B50;&#x8FDB;&#x7A0B;&#x662F;&#x5426;&#x5728;&#x751F;&#x547D;&#x5468;&#x671F;</p>
</blockquote>
<blockquote>
<p>p.daemon  &#x8BBE;&#x7F6E;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;&#x9000;&#x51FA;&#x5173;&#x7CFB;</p>
<blockquote>
<ul>
<li>&#x5982;&#x679C;&#x8BBE;&#x7F6E;&#x4E3A;True&#x5219;&#x5B50;&#x8FDB;&#x7A0B;&#x4F1A;&#x968F;&#x7236;&#x8FDB;&#x7A0B;&#x7684;&#x9000;&#x51FA;&#x800C;&#x7ED3;&#x675F;</li>
<li>&#x8981;&#x6C42;&#x5FC5;&#x987B;&#x5728;start()&#x524D;&#x8BBE;&#x7F6E;</li>
<li>&#x5982;&#x679C;daemon&#x8BBE;&#x7F6E;&#x6210;True &#x901A;&#x5E38;&#x5C31;&#x4E0D;&#x4F1A;&#x4F7F;&#x7528; join()</li>
</ul>
</blockquote>
</blockquote>
<h3 class="mume-header" id="%E8%87%AA%E5%AE%9A%E4%B9%89%E8%BF%9B%E7%A8%8B%E7%B1%BB">&#x81EA;&#x5B9A;&#x4E49;&#x8FDB;&#x7A0B;&#x7C7B;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day8/myProcess.py</strong></em></p>
<ol>
<li>
<p>&#x521B;&#x5EFA;&#x6B65;&#x9AA4;<br>
&#x3010;1&#x3011; &#x7EE7;&#x627F;Process&#x7C7B;<br>
&#x3010;2&#x3011; &#x91CD;&#x5199;<code>__init__</code>&#x65B9;&#x6CD5;&#x6DFB;&#x52A0;&#x81EA;&#x5DF1;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x4F7F;&#x7528;super()&#x52A0;&#x8F7D;&#x7236;&#x7C7B;&#x5C5E;&#x6027;<br>
&#x3010;3&#x3011; &#x91CD;&#x5199;run()&#x65B9;&#x6CD5;</p>
</li>
<li>
<p>&#x4F7F;&#x7528;&#x65B9;&#x6CD5;<br>
&#x3010;1&#x3011; &#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;<br>
&#x3010;2&#x3011; &#x8C03;&#x7528;start&#x81EA;&#x52A8;&#x6267;&#x884C;run&#x65B9;&#x6CD5;<br>
&#x3010;3&#x3011; &#x8C03;&#x7528;join&#x56DE;&#x6536;&#x7EBF;&#x7A0B;</p>
</li>
</ol>
<h3 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E6%B1%A0%E5%AE%9E%E7%8E%B0">&#x8FDB;&#x7A0B;&#x6C60;&#x5B9E;&#x73B0;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day8/pool.py</strong></em></p>
<ol>
<li>
<p>&#x5FC5;&#x8981;&#x6027;<br>
&#x3010;1&#x3011; &#x8FDB;&#x7A0B;&#x7684;&#x521B;&#x5EFA;&#x548C;&#x9500;&#x6BC1;&#x8FC7;&#x7A0B;&#x6D88;&#x8017;&#x7684;&#x8D44;&#x6E90;&#x8F83;&#x591A;<br>
&#x3010;2&#x3011; &#x5F53;&#x4EFB;&#x52A1;&#x91CF;&#x4F17;&#x591A;&#xFF0C;&#x6BCF;&#x4E2A;&#x4EFB;&#x52A1;&#x5728;&#x5F88;&#x77ED;&#x65F6;&#x95F4;&#x5185;&#x5B8C;&#x6210;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x9891;&#x7E41;&#x7684;&#x521B;&#x5EFA;&#x548C;&#x9500;&#x6BC1;&#x8FDB;&#x7A0B;&#x3002;&#x6B64;&#x65F6;&#x5BF9;&#x8BA1;&#x7B97;&#x673A;&#x538B;&#x529B;&#x8F83;&#x5927;<br>
&#x3010;3&#x3011; &#x8FDB;&#x7A0B;&#x6C60;&#x6280;&#x672F;&#x5F88;&#x597D;&#x7684;&#x89E3;&#x51B3;&#x4E86;&#x4EE5;&#x4E0A;&#x95EE;&#x9898;&#x3002;</p>
</li>
<li>
<p>&#x539F;&#x7406;</p>
</li>
</ol>
<blockquote>
<p>&#x521B;&#x5EFA;&#x4E00;&#x5B9A;&#x6570;&#x91CF;&#x7684;&#x8FDB;&#x7A0B;&#x6765;&#x5904;&#x7406;&#x4E8B;&#x4EF6;&#xFF0C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5B8C;&#x8FDB;	&#x7A0B;&#x4E0D;&#x9000;&#x51FA;&#x800C;&#x662F;&#x7EE7;&#x7EED;&#x5904;&#x7406;&#x5176;&#x4ED6;&#x4E8B;&#x4EF6;&#xFF0C;&#x76F4;&#x5230;&#x6240;&#x6709;&#x4E8B;&#x4EF6;&#x5168;&#x90FD;&#x5904;&#x7406;&#x5B8C;&#x6BD5;&#x7EDF;&#x4E00;&#x9500;&#x6BC1;&#x3002;&#x589E;&#x52A0;&#x8FDB;&#x7A0B;&#x7684;&#x91CD;&#x590D;&#x5229;&#x7528;&#xFF0C;&#x964D;&#x4F4E;&#x8D44;&#x6E90;&#x6D88;&#x8017;&#x3002;</p>
</blockquote>
<ol start="3">
<li>&#x8FDB;&#x7A0B;&#x6C60;&#x5B9E;&#x73B0;</li>
</ol>
<p>&#x3010;1&#x3011; &#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6C60;&#x5BF9;&#x8C61;&#xFF0C;&#x653E;&#x5165;&#x9002;&#x5F53;&#x7684;&#x8FDB;&#x7A0B;</p>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span> multiprocessing <span class="token keyword">import</span> Pool

Pool<span class="token punctuation">(</span>processes<span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A; &#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6C60;&#x5BF9;&#x8C61;
&#x53C2;&#x6570;&#xFF1A; &#x6307;&#x5B9A;&#x8FDB;&#x7A0B;&#x6570;&#x91CF;&#xFF0C;&#x9ED8;&#x8BA4;&#x6839;&#x636E;&#x7CFB;&#x7EDF;&#x81EA;&#x52A8;&#x5224;&#x5B9A;
</pre><p>&#x3010;2&#x3011; &#x5C06;&#x4E8B;&#x4EF6;&#x52A0;&#x5165;&#x8FDB;&#x7A0B;&#x6C60;&#x961F;&#x5217;&#x6267;&#x884C;</p>
<pre data-role="codeBlock" data-info="python" class="language-python">pool<span class="token punctuation">.</span>apply_async<span class="token punctuation">(</span>func<span class="token punctuation">,</span>args<span class="token punctuation">,</span>kwds<span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x4F7F;&#x7528;&#x8FDB;&#x7A0B;&#x6C60;&#x6267;&#x884C; func&#x4E8B;&#x4EF6;
&#x53C2;&#x6570;&#xFF1A; func &#x4E8B;&#x4EF6;&#x51FD;&#x6570;
      args &#x5143;&#x7EC4;  &#x7ED9;func&#x6309;&#x4F4D;&#x7F6E;&#x4F20;&#x53C2;
      kwds &#x5B57;&#x5178;  &#x7ED9;func&#x6309;&#x7167;&#x952E;&#x503C;&#x4F20;&#x53C2;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; &#x8FD4;&#x56DE;&#x51FD;&#x6570;&#x4E8B;&#x4EF6;&#x5BF9;&#x8C61;
</pre><p>&#x3010;3&#x3011; &#x5173;&#x95ED;&#x8FDB;&#x7A0B;&#x6C60;</p>
<pre data-role="codeBlock" data-info="python" class="language-python">pool<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A; &#x5173;&#x95ED;&#x8FDB;&#x7A0B;&#x6C60;
</pre><p>&#x3010;4&#x3011; &#x56DE;&#x6536;&#x8FDB;&#x7A0B;&#x6C60;&#x4E2D;&#x8FDB;&#x7A0B;</p>
<pre data-role="codeBlock" data-info class="language-"><code>pool.join()
&#x529F;&#x80FD;&#xFF1A; &#x56DE;&#x6536;&#x8FDB;&#x7A0B;&#x6C60;&#x4E2D;&#x8FDB;&#x7A0B;
</code></pre><h2 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1ipc">&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#xFF08;IPC&#xFF09;</h2>

<ol>
<li>
<p>&#x5FC5;&#x8981;&#x6027;&#xFF1A; &#x8FDB;&#x7A0B;&#x95F4;&#x7A7A;&#x95F4;&#x72EC;&#x7ACB;&#xFF0C;&#x8D44;&#x6E90;&#x4E0D;&#x5171;&#x4EAB;&#xFF0C;&#x6B64;&#x65F6;&#x5728;&#x9700;&#x8981;&#x8FDB;&#x7A0B;&#x95F4;&#x6570;&#x636E;&#x4F20;&#x8F93;&#x65F6;&#x5C31;&#x9700;&#x8981;&#x7279;&#x5B9A;&#x7684;&#x624B;&#x6BB5;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x901A;&#x4FE1;&#x3002;</p>
</li>
<li>
<p>&#x5E38;&#x7528;&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x65B9;&#x6CD5;</p>
</li>
</ol>
<blockquote>
<p>&#x7BA1;&#x9053;  &#x6D88;&#x606F;&#x961F;&#x5217;  &#x5171;&#x4EAB;&#x5185;&#x5B58;  &#x4FE1;&#x53F7;  &#x4FE1;&#x53F7;&#x91CF;  &#x5957;&#x63A5;&#x5B57;</p>
</blockquote>
<h3 class="mume-header" id="%E7%AE%A1%E9%81%93%E9%80%9A%E4%BF%A1pipe">&#x7BA1;&#x9053;&#x901A;&#x4FE1;(Pipe)</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/pipe.py</strong></em></p>
<ol>
<li>&#x901A;&#x4FE1;&#x539F;&#x7406;</li>
</ol>
<blockquote>
<p>&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x5F00;&#x8F9F;&#x7BA1;&#x9053;&#x7A7A;&#x95F4;&#xFF0C;&#x751F;&#x6210;&#x7BA1;&#x9053;&#x64CD;&#x4F5C;&#x5BF9;&#x8C61;&#xFF0C;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x4F7F;&#x7528;&#x540C;&#x4E00;&#x4E2A;&#x7BA1;&#x9053;&#x5BF9;&#x8C61;&#x8FDB;&#x884C;&#x8BFB;&#x5199;&#x5373;&#x53EF;&#x5B9E;&#x73B0;&#x901A;&#x4FE1;</p>
</blockquote>
<ol start="2">
<li>&#x5B9E;&#x73B0;&#x65B9;&#x6CD5;</li>
</ol>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span>  multiprocessing <span class="token keyword">import</span> Pipe

fd1<span class="token punctuation">,</span>fd2 <span class="token operator">=</span> Pipe<span class="token punctuation">(</span>duplex <span class="token operator">=</span> <span class="token boolean">True</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x521B;&#x5EFA;&#x7BA1;&#x9053;
&#x53C2;&#x6570;&#xFF1A;&#x9ED8;&#x8BA4;&#x8868;&#x793A;&#x53CC;&#x5411;&#x7BA1;&#x9053;
&#x5982;&#x679C;&#x4E3A;<span class="token boolean">False</span> &#x8868;&#x793A;&#x5355;&#x5411;&#x7BA1;&#x9053;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x8868;&#x793A;&#x7BA1;&#x9053;&#x4E24;&#x7AEF;&#x7684;&#x8BFB;&#x5199;&#x5BF9;&#x8C61;
	&#x5982;&#x679C;&#x662F;&#x53CC;&#x5411;&#x7BA1;&#x9053;&#x5747;&#x53EF;&#x8BFB;&#x5199;
	&#x5982;&#x679C;&#x662F;&#x5355;&#x5411;&#x7BA1;&#x9053;fd1&#x53EA;&#x8BFB;  fd2&#x53EA;&#x5199;

fd<span class="token punctuation">.</span>recv<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD; &#xFF1A; &#x4ECE;&#x7BA1;&#x9053;&#x83B7;&#x53D6;&#x5185;&#x5BB9;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x83B7;&#x53D6;&#x5230;&#x7684;&#x6570;&#x636E;

fd<span class="token punctuation">.</span>send<span class="token punctuation">(</span>data<span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A; &#x5411;&#x7BA1;&#x9053;&#x5199;&#x5165;&#x5185;&#x5BB9;
&#x53C2;&#x6570;&#xFF1A; &#x8981;&#x5199;&#x5165;&#x7684;&#x6570;&#x636E;
</pre><h3 class="mume-header" id="%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97">&#x6D88;&#x606F;&#x961F;&#x5217;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/queue_0.py</strong></em></p>
<p>1.&#x901A;&#x4FE1;&#x539F;&#x7406;</p>
<blockquote>
<p>&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x5EFA;&#x7ACB;&#x961F;&#x5217;&#x6A21;&#x578B;&#xFF0C;&#x8FDB;&#x7A0B;&#x901A;&#x8FC7;&#x961F;&#x5217;&#x5C06;&#x6D88;&#x606F;&#x5B58;&#x5165;&#xFF0C;&#x6216;&#x8005;&#x4ECE;&#x961F;&#x5217;&#x53D6;&#x51FA;&#x5B8C;&#x6210;&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x3002;</p>
</blockquote>
<ol start="2">
<li>&#x5B9E;&#x73B0;&#x65B9;&#x6CD5;</li>
</ol>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span> multiprocessing <span class="token keyword">import</span> Queue

q <span class="token operator">=</span> Queue<span class="token punctuation">(</span>maxsize<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x521B;&#x5EFA;&#x961F;&#x5217;&#x5BF9;&#x8C61;
&#x53C2;&#x6570;&#xFF1A;&#x6700;&#x591A;&#x5B58;&#x653E;&#x6D88;&#x606F;&#x4E2A;&#x6570;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x961F;&#x5217;&#x5BF9;&#x8C61;

q<span class="token punctuation">.</span>put<span class="token punctuation">(</span>data<span class="token punctuation">,</span><span class="token punctuation">[</span>block<span class="token punctuation">,</span>timeout<span class="token punctuation">]</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A;&#x5411;&#x961F;&#x5217;&#x5B58;&#x5165;&#x6D88;&#x606F;
&#x53C2;&#x6570;&#xFF1A;data  &#x8981;&#x5B58;&#x5165;&#x7684;&#x5185;&#x5BB9;
block  &#x8BBE;&#x7F6E;&#x662F;&#x5426;&#x963B;&#x585E; <span class="token boolean">False</span>&#x4E3A;&#x975E;&#x963B;&#x585E;
timeout  &#x8D85;&#x65F6;&#x68C0;&#x6D4B;

q<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token punctuation">[</span>block<span class="token punctuation">,</span>timeout<span class="token punctuation">]</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A;&#x4ECE;&#x961F;&#x5217;&#x53D6;&#x51FA;&#x6D88;&#x606F;
&#x53C2;&#x6570;&#xFF1A;block  &#x8BBE;&#x7F6E;&#x662F;&#x5426;&#x963B;&#x585E; <span class="token boolean">False</span>&#x4E3A;&#x975E;&#x963B;&#x585E;
timeout  &#x8D85;&#x65F6;&#x68C0;&#x6D4B;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; &#x8FD4;&#x56DE;&#x83B7;&#x53D6;&#x5230;&#x7684;&#x5185;&#x5BB9;

q<span class="token punctuation">.</span>full<span class="token punctuation">(</span><span class="token punctuation">)</span>   &#x5224;&#x65AD;&#x961F;&#x5217;&#x662F;&#x5426;&#x4E3A;&#x6EE1;
q<span class="token punctuation">.</span>empty<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x5224;&#x65AD;&#x961F;&#x5217;&#x662F;&#x5426;&#x4E3A;&#x7A7A;
q<span class="token punctuation">.</span>qsize<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x83B7;&#x53D6;&#x961F;&#x5217;&#x4E2D;&#x6D88;&#x606F;&#x4E2A;&#x6570;
q<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x5173;&#x95ED;&#x961F;&#x5217;
</pre><h3 class="mume-header" id="%E5%85%B1%E4%BA%AB%E5%86%85%E5%AD%98">&#x5171;&#x4EAB;&#x5185;&#x5B58;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/value.py</strong></em><br>
<em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/array.py</strong></em></p>
<ol>
<li>
<p>&#x901A;&#x4FE1;&#x539F;&#x7406;&#xFF1A;&#x5728;&#x5185;&#x4E2D;&#x5F00;&#x8F9F;&#x4E00;&#x5757;&#x7A7A;&#x95F4;&#xFF0C;&#x8FDB;&#x7A0B;&#x53EF;&#x4EE5;&#x5199;&#x5165;&#x5185;&#x5BB9;&#x548C;&#x8BFB;&#x53D6;&#x5185;&#x5BB9;&#x5B8C;&#x6210;&#x901A;&#x4FE1;&#xFF0C;&#x4F46;&#x662F;&#x6BCF;&#x6B21;&#x5199;&#x5165;&#x5185;&#x5BB9;&#x4F1A;&#x8986;&#x76D6;&#x4E4B;&#x524D;&#x5185;&#x5BB9;&#x3002;</p>
</li>
<li>
<p>&#x5B9E;&#x73B0;&#x65B9;&#x6CD5;</p>
</li>
</ol>
<p><img src="img/6_ctype.png" alt></p>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span> multiprocessing <span class="token keyword">import</span> Value<span class="token punctuation">,</span>Array

obj <span class="token operator">=</span> Value<span class="token punctuation">(</span>ctype<span class="token punctuation">,</span>data<span class="token punctuation">)</span>
&#x529F;&#x80FD; &#xFF1A; &#x5F00;&#x8F9F;&#x5171;&#x4EAB;&#x5185;&#x5B58;
&#x53C2;&#x6570; &#xFF1A; ctype  &#x8868;&#x793A;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x7C7B;&#x578B; <span class="token string">&apos;i&apos;</span>  <span class="token string">&apos;f&apos;</span>  <span class="token string">&apos;c&apos;</span>
       data   &#x5171;&#x4EAB;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x521D;&#x59CB;&#x6570;&#x636E;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x5BF9;&#x8C61;

obj<span class="token punctuation">.</span>value  &#x5BF9;&#x8BE5;&#x5C5E;&#x6027;&#x7684;&#x4FEE;&#x6539;&#x67E5;&#x770B;&#x5373;&#x5BF9;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x8BFB;&#x5199;


obj <span class="token operator">=</span> Array<span class="token punctuation">(</span>ctype<span class="token punctuation">,</span>data<span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A; &#x5F00;&#x8F9F;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x7A7A;&#x95F4;
&#x53C2;&#x6570;&#xFF1A; ctype  &#x8868;&#x793A;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x6570;&#x636E;&#x7C7B;&#x578B;
      data   &#x6574;&#x6570;&#x5219;&#x8868;&#x793A;&#x5F00;&#x8F9F;&#x7A7A;&#x95F4;&#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x5176;&#x4ED6;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x8868;&#x793A;&#x5F00;&#x8F9F;&#x7A7A;&#x95F4;&#x5B58;&#x653E;&#x7684;&#x521D;&#x59CB;&#x5316;&#x6570;&#x636E;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x5BF9;&#x8C61;

Array&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x8BFB;&#x5199;&#xFF1A; &#x901A;&#x8FC7;&#x904D;&#x5386;obj&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#x6BCF;&#x4E2A;&#x503C;&#xFF0C;&#x76F4;&#x63A5;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x7D22;&#x5F15;&#x5E8F;&#x53F7;&#x4FEE;&#x6539;&#x4EFB;&#x610F;&#x503C;&#x3002;

<span class="token operator">*</span> &#x53EF;&#x4EE5;&#x4F7F;&#x7528;obj<span class="token punctuation">.</span>value&#x76F4;&#x63A5;&#x6253;&#x5370;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x5B57;&#x8282;&#x4E32;
</pre><h3 class="mume-header" id="%E4%BF%A1%E5%8F%B7%E9%87%8F%E4%BF%A1%E5%8F%B7%E7%81%AF%E9%9B%86">&#x4FE1;&#x53F7;&#x91CF;&#xFF08;&#x4FE1;&#x53F7;&#x706F;&#x96C6;&#xFF09;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/sem.py</strong></em></p>
<ol>
<li>&#x901A;&#x4FE1;&#x539F;&#x7406;</li>
</ol>
<blockquote>
<p>&#x7ED9;&#x5B9A;&#x4E00;&#x4E2A;&#x6570;&#x91CF;&#x5BF9;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x53EF;&#x89C1;&#x3002;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x90FD;&#x53EF;&#x4EE5;&#x64CD;&#x4F5C;&#x8BE5;&#x6570;&#x91CF;&#x589E;&#x51CF;&#xFF0C;&#x5E76;&#x6839;&#x636E;&#x6570;&#x91CF;&#x503C;&#x51B3;&#x5B9A;&#x81EA;&#x5DF1;&#x7684;&#x884C;&#x4E3A;&#x3002;</p>
</blockquote>
<ol start="2">
<li>&#x5B9E;&#x73B0;&#x65B9;&#x6CD5;</li>
</ol>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span> multiprocessing <span class="token keyword">import</span> Semaphore

sem <span class="token operator">=</span> Semaphore<span class="token punctuation">(</span>num<span class="token punctuation">)</span>
&#x529F;&#x80FD; &#xFF1A; &#x521B;&#x5EFA;&#x4FE1;&#x53F7;&#x91CF;&#x5BF9;&#x8C61;
&#x53C2;&#x6570; &#xFF1A; &#x4FE1;&#x53F7;&#x91CF;&#x7684;&#x521D;&#x59CB;&#x503C;
&#x8FD4;&#x56DE;&#x503C; &#xFF1A; &#x4FE1;&#x53F7;&#x91CF;&#x5BF9;&#x8C61;

sem<span class="token punctuation">.</span>acquire<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x5C06;&#x4FE1;&#x53F7;&#x91CF;&#x51CF;<span class="token number">1</span> &#x5F53;&#x4FE1;&#x53F7;&#x91CF;&#x4E3A;<span class="token number">0</span>&#x65F6;&#x963B;&#x585E;
sem<span class="token punctuation">.</span>release<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x5C06;&#x4FE1;&#x53F7;&#x91CF;&#x52A0;<span class="token number">1</span>
sem<span class="token punctuation">.</span>get_value<span class="token punctuation">(</span><span class="token punctuation">)</span> &#x83B7;&#x53D6;&#x4FE1;&#x53F7;&#x91CF;&#x6570;&#x91CF;
</pre><h2 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E7%BC%96%E7%A8%8Bthread">&#x7EBF;&#x7A0B;&#x7F16;&#x7A0B;&#xFF08;Thread&#xFF09;</h2>

<h3 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5">&#x7EBF;&#x7A0B;&#x57FA;&#x672C;&#x6982;&#x5FF5;</h3>

<ol>
<li>
<p>&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;<br>
&#x3010;1&#x3011; &#x7EBF;&#x7A0B;&#x88AB;&#x79F0;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x7684;&#x8FDB;&#x7A0B;<br>
&#x3010;2&#x3011; &#x7EBF;&#x7A0B;&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x8BA1;&#x7B97;&#x673A;&#x591A;&#x6838;&#x8D44;&#x6E90;&#xFF0C;&#x662F;&#x591A;&#x4EFB;&#x52A1;&#x7F16;&#x7A0B;&#x65B9;&#x5F0F;<br>
&#x3010;3&#x3011; &#x7EBF;&#x7A0B;&#x662F;&#x7CFB;&#x7EDF;&#x5206;&#x914D;&#x5185;&#x6838;&#x7684;&#x6700;&#x5C0F;&#x5355;&#x5143;<br>
&#x3010;4&#x3011; &#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#x8FDB;&#x7A0B;&#x7684;&#x5206;&#x652F;&#x4EFB;&#x52A1;</p>
</li>
<li>
<p>&#x7EBF;&#x7A0B;&#x7279;&#x5F81;<br>
&#x3010;1&#x3011; &#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4E2D;&#x53EF;&#x4EE5;&#x5305;&#x542B;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;<br>
&#x3010;2&#x3011; &#x7EBF;&#x7A0B;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x8FD0;&#x884C;&#x884C;&#x4E3A;&#xFF0C;&#x6D88;&#x8017;&#x8BA1;&#x7B97;&#x673A;&#x8D44;&#x6E90;<br>
&#x3010;3&#x3011; &#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x7EBF;&#x7A0B;&#x5171;&#x4EAB;&#x8FD9;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;&#x8D44;&#x6E90;<br>
&#x3010;4&#x3011; &#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x8FD0;&#x884C;&#x4E92;&#x4E0D;&#x5F71;&#x54CD;&#x5404;&#x81EA;&#x8FD0;&#x884C;<br>
&#x3010;5&#x3011; &#x7EBF;&#x7A0B;&#x7684;&#x521B;&#x5EFA;&#x548C;&#x9500;&#x6BC1;&#x6D88;&#x8017;&#x8D44;&#x6E90;&#x8FDC;&#x5C0F;&#x4E8E;&#x8FDB;&#x7A0B;<br>
&#x3010;6&#x3011; &#x5404;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E5F;&#x6709;&#x81EA;&#x5DF1;&#x7684;ID&#x7B49;&#x7279;&#x5F81;</p>
</li>
</ol>
<h3 class="mume-header" id="threading%E6%A8%A1%E5%9D%97%E5%88%9B%E5%BB%BA%E7%BA%BF%E7%A8%8B">threading&#x6A21;&#x5757;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/thread1.py</strong></em><br>
<em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/thread2.py</strong></em></p>
<p>&#x3010;1&#x3011; &#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;</p>
<pre data-role="codeBlock" data-info class="language-"><code>from threading import Thread 

t = Thread()
&#x529F;&#x80FD;&#xFF1A;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;
&#x53C2;&#x6570;&#xFF1A;target &#x7ED1;&#x5B9A;&#x7EBF;&#x7A0B;&#x51FD;&#x6570;
     args   &#x5143;&#x7EC4; &#x7ED9;&#x7EBF;&#x7A0B;&#x51FD;&#x6570;&#x4F4D;&#x7F6E;&#x4F20;&#x53C2;
     kwargs &#x5B57;&#x5178; &#x7ED9;&#x7EBF;&#x7A0B;&#x51FD;&#x6570;&#x952E;&#x503C;&#x4F20;&#x53C2;
</code></pre><p>&#x3010;2&#x3011; &#x542F;&#x52A8;&#x7EBF;&#x7A0B;</p>
<pre data-role="codeBlock" data-info class="language-"><code> t.start()
</code></pre><p>&#x3010;3&#x3011; &#x56DE;&#x6536;&#x7EBF;&#x7A0B;</p>
<pre data-role="codeBlock" data-info class="language-"><code> t.join([timeout])
</code></pre><h3 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E5%AF%B9%E8%B1%A1%E5%B1%9E%E6%80%A7">&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;&#x5C5E;&#x6027;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/thread_attr.py</strong></em></p>
<blockquote>
<p><a href="http://t.name">t.name</a> &#x7EBF;&#x7A0B;&#x540D;&#x79F0;<br>
t.setName()  &#x8BBE;&#x7F6E;&#x7EBF;&#x7A0B;&#x540D;&#x79F0;<br>
t.getName()  &#x83B7;&#x53D6;&#x7EBF;&#x7A0B;&#x540D;&#x79F0;</p>
</blockquote>
<blockquote>
<p>t.is_alive()  &#x67E5;&#x770B;&#x7EBF;&#x7A0B;&#x662F;&#x5426;&#x5728;&#x751F;&#x547D;&#x5468;&#x671F;</p>
</blockquote>
<blockquote>
<p>t.daemon  &#x8BBE;&#x7F6E;&#x4E3B;&#x7EBF;&#x7A0B;&#x548C;&#x5206;&#x652F;&#x7EBF;&#x7A0B;&#x7684;&#x9000;&#x51FA;&#x5173;&#x7CFB;<br>
t.setDaemon()  &#x8BBE;&#x7F6E;daemon&#x5C5E;&#x6027;&#x503C;<br>
t.isDaemon()  &#x67E5;&#x770B;daemon&#x5C5E;&#x6027;&#x503C;</p>
<blockquote>
<p>daemon&#x4E3A;True&#x65F6;&#x4E3B;&#x7EBF;&#x7A0B;&#x9000;&#x51FA;&#x5206;&#x652F;&#x7EBF;&#x7A0B;&#x4E5F;&#x9000;&#x51FA;&#x3002;&#x8981;&#x5728;start&#x524D;&#x8BBE;&#x7F6E;&#xFF0C;&#x901A;&#x5E38;&#x4E0D;&#x548C;join&#x4E00;&#x8D77;&#x4F7F;&#x7528;&#x3002;</p>
</blockquote>
</blockquote>
<h3 class="mume-header" id="%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BA%BF%E7%A8%8B%E7%B1%BB">&#x81EA;&#x5B9A;&#x4E49;&#x7EBF;&#x7A0B;&#x7C7B;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day9/myThread.py</strong></em></p>
<ol>
<li>
<p>&#x521B;&#x5EFA;&#x6B65;&#x9AA4;<br>
&#x3010;1&#x3011; &#x7EE7;&#x627F;Thread&#x7C7B;<br>
&#x3010;2&#x3011; &#x91CD;&#x5199;<code>__init__</code>&#x65B9;&#x6CD5;&#x6DFB;&#x52A0;&#x81EA;&#x5DF1;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x4F7F;&#x7528;super()&#x52A0;&#x8F7D;&#x7236;&#x7C7B;&#x5C5E;&#x6027;<br>
&#x3010;3&#x3011; &#x91CD;&#x5199;run()&#x65B9;&#x6CD5;</p>
</li>
<li>
<p>&#x4F7F;&#x7528;&#x65B9;&#x6CD5;<br>
&#x3010;1&#x3011; &#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;<br>
&#x3010;2&#x3011; &#x8C03;&#x7528;start&#x81EA;&#x52A8;&#x6267;&#x884C;run&#x65B9;&#x6CD5;<br>
&#x3010;3&#x3011; &#x8C03;&#x7528;join&#x56DE;&#x6536;&#x7EBF;&#x7A0B;</p>
</li>
</ol>
<h2 class="mume-header" id="%E5%90%8C%E6%AD%A5%E4%BA%92%E6%96%A5">&#x540C;&#x6B65;&#x4E92;&#x65A5;</h2>

<h3 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E6%96%B9%E6%B3%95">&#x7EBF;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x65B9;&#x6CD5;</h3>

<ol>
<li>&#x901A;&#x4FE1;&#x65B9;&#x6CD5;</li>
</ol>
<blockquote>
<p>&#x7EBF;&#x7A0B;&#x95F4;&#x4F7F;&#x7528;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x8FDB;&#x884C;&#x901A;&#x4FE1;</p>
</blockquote>
<ol start="2">
<li>&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x4E89;&#x593A;</li>
</ol>
<ul>
<li>
<p>&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#xFF1A;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x6216;&#x8005;&#x7EBF;&#x7A0B;&#x90FD;&#x53EF;&#x4EE5;&#x64CD;&#x4F5C;&#x7684;&#x8D44;&#x6E90;&#x79F0;&#x4E3A;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x3002;&#x5BF9;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x7684;&#x64CD;&#x4F5C;&#x4EE3;&#x7801;&#x6BB5;&#x79F0;&#x4E3A;&#x4E34;&#x754C;&#x533A;&#x3002;</p>
</li>
<li>
<p>&#x5F71;&#x54CD; &#xFF1A; &#x5BF9;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x7684;&#x65E0;&#x5E8F;&#x64CD;&#x4F5C;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x6570;&#x636E;&#x7684;&#x6DF7;&#x4E71;&#xFF0C;&#x6216;&#x8005;&#x64CD;&#x4F5C;&#x9519;&#x8BEF;&#x3002;&#x6B64;&#x65F6;&#x5F80;&#x5F80;&#x9700;&#x8981;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x673A;&#x5236;&#x534F;&#x8C03;&#x64CD;&#x4F5C;&#x987A;&#x5E8F;&#x3002;</p>
</li>
</ul>
<ol start="3">
<li>&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x673A;&#x5236;</li>
</ol>
<blockquote>
<p>&#x540C;&#x6B65; &#xFF1A; &#x540C;&#x6B65;&#x662F;&#x4E00;&#x79CD;&#x534F;&#x4F5C;&#x5173;&#x7CFB;&#xFF0C;&#x4E3A;&#x5B8C;&#x6210;&#x64CD;&#x4F5C;&#xFF0C;&#x591A;&#x8FDB;&#x7A0B;&#x6216;&#x8005;&#x7EBF;&#x7A0B;&#x95F4;&#x5F62;&#x6210;&#x4E00;&#x79CD;&#x534F;&#x8C03;&#xFF0C;&#x6309;&#x7167;&#x5FC5;&#x8981;&#x7684;&#x6B65;&#x9AA4;&#x6709;&#x5E8F;&#x6267;&#x884C;&#x64CD;&#x4F5C;&#x3002;</p>
</blockquote>
<p><img src="img/7_%E5%90%8C%E6%AD%A5.png" alt></p>
<blockquote>
<p>&#x4E92;&#x65A5; &#xFF1A; &#x4E92;&#x65A5;&#x662F;&#x4E00;&#x79CD;&#x5236;&#x7EA6;&#x5173;&#x7CFB;&#xFF0C;&#x5F53;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x6216;&#x8005;&#x7EBF;&#x7A0B;&#x5360;&#x6709;&#x8D44;&#x6E90;&#x65F6;&#x4F1A;&#x8FDB;&#x884C;&#x52A0;&#x9501;&#x5904;&#x7406;&#xFF0C;&#x6B64;&#x65F6;&#x5176;&#x4ED6;&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x5C31;&#x65E0;&#x6CD5;&#x64CD;&#x4F5C;&#x8BE5;&#x8D44;&#x6E90;&#xFF0C;&#x76F4;&#x5230;&#x89E3;&#x9501;&#x540E;&#x624D;&#x80FD;&#x64CD;&#x4F5C;&#x3002;</p>
</blockquote>
<p><img src="img/7_%E4%BA%92%E6%96%A5.png" alt></p>
<h3 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E4%BA%92%E6%96%A5%E6%96%B9%E6%B3%95">&#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x65B9;&#x6CD5;</h3>

<h4 class="mume-header" id="%E7%BA%BF%E7%A8%8Bevent">&#x7EBF;&#x7A0B;Event</h4>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day10/thread_event.py</strong></em></p>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span> threading <span class="token keyword">import</span> Event

e <span class="token operator">=</span> Event<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x521B;&#x5EFA;&#x7EBF;&#x7A0B;event&#x5BF9;&#x8C61;

e<span class="token punctuation">.</span>wait<span class="token punctuation">(</span><span class="token punctuation">[</span>timeout<span class="token punctuation">]</span><span class="token punctuation">)</span>  &#x963B;&#x585E;&#x7B49;&#x5F85;e&#x88AB;<span class="token builtin">set</span>

e<span class="token punctuation">.</span><span class="token builtin">set</span><span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x8BBE;&#x7F6E;e&#xFF0C;&#x4F7F;wait&#x7ED3;&#x675F;&#x963B;&#x585E;

e<span class="token punctuation">.</span>clear<span class="token punctuation">(</span><span class="token punctuation">)</span> &#x4F7F;e&#x56DE;&#x5230;&#x672A;&#x88AB;&#x8BBE;&#x7F6E;&#x72B6;&#x6001;

e<span class="token punctuation">.</span>is_set<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x67E5;&#x770B;&#x5F53;&#x524D;e&#x662F;&#x5426;&#x88AB;&#x8BBE;&#x7F6E;
</pre><h4 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E9%94%81-lock">&#x7EBF;&#x7A0B;&#x9501; Lock</h4>

<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;day10/thread_event.py</strong></em></p>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">from</span>  threading <span class="token keyword">import</span> Lock

lock <span class="token operator">=</span> Lock<span class="token punctuation">(</span><span class="token punctuation">)</span>  &#x521B;&#x5EFA;&#x9501;&#x5BF9;&#x8C61;
lock<span class="token punctuation">.</span>acquire<span class="token punctuation">(</span><span class="token punctuation">)</span> &#x4E0A;&#x9501;  &#x5982;&#x679C;lock&#x5DF2;&#x7ECF;&#x4E0A;&#x9501;&#x518D;&#x8C03;&#x7528;&#x4F1A;&#x963B;&#x585E;
lock<span class="token punctuation">.</span>release<span class="token punctuation">(</span><span class="token punctuation">)</span> &#x89E3;&#x9501;

<span class="token keyword">with</span>  lock<span class="token punctuation">:</span>  &#x4E0A;&#x9501;
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
	 <span class="token keyword">with</span>&#x4EE3;&#x7801;&#x5757;&#x7ED3;&#x675F;&#x81EA;&#x52A8;&#x89E3;&#x9501;
</pre><h3 class="mume-header" id="%E6%AD%BB%E9%94%81%E5%8F%8A%E5%85%B6%E5%A4%84%E7%90%86">&#x6B7B;&#x9501;&#x53CA;&#x5176;&#x5904;&#x7406;</h3>

<ol>
<li>&#x5B9A;&#x4E49;</li>
</ol>
<blockquote>
<p>&#x6B7B;&#x9501;&#x662F;&#x6307;&#x4E24;&#x4E2A;&#x6216;&#x4E24;&#x4E2A;&#x4EE5;&#x4E0A;&#x7684;&#x7EBF;&#x7A0B;&#x5728;&#x6267;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x7531;&#x4E8E;&#x7ADE;&#x4E89;&#x8D44;&#x6E90;&#x6216;&#x8005;&#x7531;&#x4E8E;&#x5F7C;&#x6B64;&#x901A;&#x4FE1;&#x800C;&#x9020;&#x6210;&#x7684;&#x4E00;&#x79CD;&#x963B;&#x585E;&#x7684;&#x73B0;&#x8C61;&#xFF0C;&#x82E5;&#x65E0;&#x5916;&#x529B;&#x4F5C;&#x7528;&#xFF0C;&#x5B83;&#x4EEC;&#x90FD;&#x5C06;&#x65E0;&#x6CD5;&#x63A8;&#x8FDB;&#x4E0B;&#x53BB;&#x3002;&#x6B64;&#x65F6;&#x79F0;&#x7CFB;&#x7EDF;&#x5904;&#x4E8E;&#x6B7B;&#x9501;&#x72B6;&#x6001;&#x6216;&#x7CFB;&#x7EDF;&#x4EA7;&#x751F;&#x4E86;&#x6B7B;&#x9501;&#x3002;</p>
</blockquote>
<p><img src="img/%E6%AD%BB%E9%94%81.jpg" alt></p>
<ol start="2">
<li>&#x6B7B;&#x9501;&#x4EA7;&#x751F;&#x6761;&#x4EF6;</li>
</ol>
<p><em><strong>&#x4EE3;&#x7801;&#x793A;&#x4F8B;: day10/dead_lock.py</strong></em></p>
<blockquote>
<p>&#x6B7B;&#x9501;&#x53D1;&#x751F;&#x7684;&#x5FC5;&#x8981;&#x6761;&#x4EF6;</p>
<blockquote>
<ul>
<li>&#x4E92;&#x65A5;&#x6761;&#x4EF6;&#xFF1A;&#x6307;&#x7EBF;&#x7A0B;&#x5BF9;&#x6240;&#x5206;&#x914D;&#x5230;&#x7684;&#x8D44;&#x6E90;&#x8FDB;&#x884C;&#x6392;&#x5B83;&#x6027;&#x4F7F;&#x7528;&#xFF0C;&#x5373;&#x5728;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#x67D0;&#x8D44;&#x6E90;&#x53EA;&#x7531;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x5360;&#x7528;&#x3002;&#x5982;&#x679C;&#x6B64;&#x65F6;&#x8FD8;&#x6709;&#x5176;&#x5B83;&#x8FDB;&#x7A0B;&#x8BF7;&#x6C42;&#x8D44;&#x6E90;&#xFF0C;&#x5219;&#x8BF7;&#x6C42;&#x8005;&#x53EA;&#x80FD;&#x7B49;&#x5F85;&#xFF0C;&#x76F4;&#x81F3;&#x5360;&#x6709;&#x8D44;&#x6E90;&#x7684;&#x8FDB;&#x7A0B;&#x7528;&#x6BD5;&#x91CA;&#x653E;&#x3002;</li>
<li>&#x8BF7;&#x6C42;&#x548C;&#x4FDD;&#x6301;&#x6761;&#x4EF6;&#xFF1A;&#x6307;&#x7EBF;&#x7A0B;&#x5DF2;&#x7ECF;&#x4FDD;&#x6301;&#x81F3;&#x5C11;&#x4E00;&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x4F46;&#x53C8;&#x63D0;&#x51FA;&#x4E86;&#x65B0;&#x7684;&#x8D44;&#x6E90;&#x8BF7;&#x6C42;&#xFF0C;&#x800C;&#x8BE5;&#x8D44;&#x6E90;&#x5DF2;&#x88AB;&#x5176;&#x5B83;&#x8FDB;&#x7A0B;&#x5360;&#x6709;&#xFF0C;&#x6B64;&#x65F6;&#x8BF7;&#x6C42;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#xFF0C;&#x4F46;&#x53C8;&#x5BF9;&#x81EA;&#x5DF1;&#x5DF2;&#x83B7;&#x5F97;&#x7684;&#x5176;&#x5B83;&#x8D44;&#x6E90;&#x4FDD;&#x6301;&#x4E0D;&#x653E;&#x3002;</li>
<li>&#x4E0D;&#x5265;&#x593A;&#x6761;&#x4EF6;&#xFF1A;&#x6307;&#x7EBF;&#x7A0B;&#x5DF2;&#x83B7;&#x5F97;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x5728;&#x672A;&#x4F7F;&#x7528;&#x5B8C;&#x4E4B;&#x524D;&#xFF0C;&#x4E0D;&#x80FD;&#x88AB;&#x5265;&#x593A;&#xFF0C;&#x53EA;&#x80FD;&#x5728;&#x4F7F;&#x7528;&#x5B8C;&#x65F6;&#x7531;&#x81EA;&#x5DF1;&#x91CA;&#x653E;,&#x901A;&#x5E38;CPU&#x5185;&#x5B58;&#x8D44;&#x6E90;&#x662F;&#x53EF;&#x4EE5;&#x88AB;&#x7CFB;&#x7EDF;&#x5F3A;&#x884C;&#x8C03;&#x914D;&#x5265;&#x593A;&#x7684;&#x3002;</li>
<li>&#x73AF;&#x8DEF;&#x7B49;&#x5F85;&#x6761;&#x4EF6;&#xFF1A;&#x6307;&#x5728;&#x53D1;&#x751F;&#x6B7B;&#x9501;&#x65F6;&#xFF0C;&#x5FC5;&#x7136;&#x5B58;&#x5728;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x2014;&#x2014;&#x8D44;&#x6E90;&#x7684;&#x73AF;&#x5F62;&#x94FE;&#xFF0C;&#x5373;&#x8FDB;&#x7A0B;&#x96C6;&#x5408;{T0&#xFF0C;T1&#xFF0C;T2&#xFF0C;&#xB7;&#xB7;&#xB7;&#xFF0C;Tn}&#x4E2D;&#x7684;T0&#x6B63;&#x5728;&#x7B49;&#x5F85;&#x4E00;&#x4E2A;T1&#x5360;&#x7528;&#x7684;&#x8D44;&#x6E90;&#xFF1B;T1&#x6B63;&#x5728;&#x7B49;&#x5F85;T2&#x5360;&#x7528;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x2026;&#x2026;&#xFF0C;Tn&#x6B63;&#x5728;&#x7B49;&#x5F85;&#x5DF2;&#x88AB;T0&#x5360;&#x7528;&#x7684;&#x8D44;&#x6E90;&#x3002;</li>
</ul>
</blockquote>
</blockquote>
<blockquote>
<p>&#x6B7B;&#x9501;&#x7684;&#x4EA7;&#x751F;&#x539F;&#x56E0;</p>
<blockquote>
<p>&#x7B80;&#x5355;&#x6765;&#x8BF4;&#x9020;&#x6210;&#x6B7B;&#x9501;&#x7684;&#x539F;&#x56E0;&#x53EF;&#x4EE5;&#x6982;&#x62EC;&#x6210;&#x4E09;&#x53E5;&#x8BDD;&#xFF1A;</p>
<ul>
<li>&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x62E5;&#x6709;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x9700;&#x8981;&#x7684;&#x8D44;&#x6E90;</li>
<li>&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x7B49;&#x5F85;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5DF2;&#x62E5;&#x6709;&#x7684;&#x8D44;&#x6E90;</li>
<li>&#x90FD;&#x4E0D;&#x653E;&#x5F03;&#x81EA;&#x5DF1;&#x62E5;&#x6709;&#x7684;&#x8D44;&#x6E90;</li>
</ul>
</blockquote>
</blockquote>
<ol start="3">
<li>&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;</li>
</ol>
<p>&#x6B7B;&#x9501;&#x662F;&#x6211;&#x4EEC;&#x975E;&#x5E38;&#x4E0D;&#x613F;&#x610F;&#x770B;&#x5230;&#x7684;&#x4E00;&#x79CD;&#x73B0;&#x8C61;&#xFF0C;&#x6211;&#x4EEC;&#x8981;&#x5C3D;&#x53EF;&#x80FD;&#x907F;&#x514D;&#x6B7B;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x53D1;&#x751F;&#x3002;&#x901A;&#x8FC7;&#x8BBE;&#x7F6E;&#x67D0;&#x4E9B;&#x9650;&#x5236;&#x6761;&#x4EF6;&#xFF0C;&#x53BB;&#x7834;&#x574F;&#x4EA7;&#x751F;&#x6B7B;&#x9501;&#x7684;&#x56DB;&#x4E2A;&#x5FC5;&#x8981;&#x6761;&#x4EF6;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x6216;&#x8005;&#x51E0;&#x4E2A;&#xFF0C;&#x6765;&#x9884;&#x9632;&#x53D1;&#x751F;&#x6B7B;&#x9501;&#x3002;&#x9884;&#x9632;&#x6B7B;&#x9501;&#x662F;&#x4E00;&#x79CD;&#x8F83;&#x6613;&#x5B9E;&#x73B0;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x6240;&#x65BD;&#x52A0;&#x7684;&#x9650;&#x5236;&#x6761;&#x4EF6;&#x5F80;&#x5F80;&#x592A;&#x4E25;&#x683C;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x7CFB;&#x7EDF;&#x8D44;&#x6E90;&#x5229;&#x7528;&#x7387;&#x3002;</p>
<h2 class="mume-header" id="python%E7%BA%BF%E7%A8%8Bgil">python&#x7EBF;&#x7A0B;GIL</h2>

<ol>
<li>python&#x7EBF;&#x7A0B;&#x7684;GIL&#x95EE;&#x9898; &#xFF08;&#x5168;&#x5C40;&#x89E3;&#x91CA;&#x5668;&#x9501;&#xFF09;</li>
</ol>
<blockquote>
<p>&#x4EC0;&#x4E48;&#x662F;GIL &#xFF1A;&#x7531;&#x4E8E;python&#x89E3;&#x91CA;&#x5668;&#x8BBE;&#x8BA1;&#x4E2D;&#x52A0;&#x5165;&#x4E86;&#x89E3;&#x91CA;&#x5668;&#x9501;&#xFF0C;&#x5BFC;&#x81F4;python&#x89E3;&#x91CA;&#x5668;&#x540C;&#x4E00;&#x65F6;&#x523B;&#x53EA;&#x80FD;&#x89E3;&#x91CA;&#x6267;&#x884C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x5927;&#x5927;&#x964D;&#x4F4E;&#x4E86;&#x7EBF;&#x7A0B;&#x7684;&#x6267;&#x884C;&#x6548;&#x7387;&#x3002;</p>
</blockquote>
<blockquote>
<p>&#x5BFC;&#x81F4;&#x540E;&#x679C;&#xFF1A; &#x56E0;&#x4E3A;&#x9047;&#x5230;&#x963B;&#x585E;&#x65F6;&#x7EBF;&#x7A0B;&#x4F1A;&#x4E3B;&#x52A8;&#x8BA9;&#x51FA;&#x89E3;&#x91CA;&#x5668;&#xFF0C;&#x53BB;&#x89E3;&#x91CA;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x3002;&#x6240;&#x4EE5;python&#x591A;&#x7EBF;&#x7A0B;&#x5728;&#x6267;&#x884C;&#x591A;&#x963B;&#x585E;&#x9AD8;&#x5EF6;&#x8FDF;IO&#x65F6;&#x53EF;&#x4EE5;&#x63D0;&#x5347;&#x7A0B;&#x5E8F;&#x6548;&#x7387;&#xFF0C;&#x5176;&#x4ED6;&#x60C5;&#x51B5;&#x5E76;&#x4E0D;&#x80FD;&#x5BF9;&#x6548;&#x7387;&#x6709;&#x6240;&#x63D0;&#x5347;&#x3002;</p>
</blockquote>
<blockquote>
<p>GIL&#x95EE;&#x9898;&#x5EFA;&#x8BAE;</p>
<ul>
<li>&#x5C3D;&#x91CF;&#x4F7F;&#x7528;&#x8FDB;&#x7A0B;&#x5B8C;&#x6210;&#x65E0;&#x963B;&#x585E;&#x7684;&#x5E76;&#x53D1;&#x884C;&#x4E3A;</li>
<li>&#x4E0D;&#x4F7F;&#x7528;c&#x4F5C;&#x4E3A;&#x89E3;&#x91CA;&#x5668; &#xFF08;Java  C#&#xFF09;</li>
</ul>
</blockquote>
<ol start="2">
<li>&#x7ED3;&#x8BBA; &#xFF1A; &#x5728;&#x65E0;&#x963B;&#x585E;&#x72B6;&#x6001;&#x4E0B;&#xFF0C;&#x591A;&#x7EBF;&#x7A0B;&#x7A0B;&#x5E8F;&#x548C;&#x5355;&#x7EBF;&#x7A0B;&#x7A0B;&#x5E8F;&#x6267;&#x884C;&#x6548;&#x7387;&#x51E0;&#x4E4E;&#x5DEE;&#x4E0D;&#x591A;&#xFF0C;&#x751A;&#x81F3;&#x8FD8;&#x4E0D;&#x5982;&#x5355;&#x7EBF;&#x7A0B;&#x6548;&#x7387;&#x3002;&#x4F46;&#x662F;&#x591A;&#x8FDB;&#x7A0B;&#x8FD0;&#x884C;&#x76F8;&#x540C;&#x5185;&#x5BB9;&#x5374;&#x53EF;&#x4EE5;&#x6709;&#x660E;&#x663E;&#x7684;&#x6548;&#x7387;&#x63D0;&#x5347;&#x3002;</li>
</ol>
<h2 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E7%9A%84%E5%8C%BA%E5%88%AB%E8%81%94%E7%B3%BB">&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x7684;&#x533A;&#x522B;&#x8054;&#x7CFB;</h2>

<h3 class="mume-header" id="%E5%8C%BA%E5%88%AB%E8%81%94%E7%B3%BB">&#x533A;&#x522B;&#x8054;&#x7CFB;</h3>

<ol>
<li>&#x4E24;&#x8005;&#x90FD;&#x662F;&#x591A;&#x4EFB;&#x52A1;&#x7F16;&#x7A0B;&#x65B9;&#x5F0F;&#xFF0C;&#x90FD;&#x80FD;&#x4F7F;&#x7528;&#x8BA1;&#x7B97;&#x673A;&#x591A;&#x6838;&#x8D44;&#x6E90;</li>
<li>&#x8FDB;&#x7A0B;&#x7684;&#x521B;&#x5EFA;&#x5220;&#x9664;&#x6D88;&#x8017;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#x8D44;&#x6E90;&#x6BD4;&#x7EBF;&#x7A0B;&#x591A;</li>
<li>&#x8FDB;&#x7A0B;&#x7A7A;&#x95F4;&#x72EC;&#x7ACB;&#xFF0C;&#x6570;&#x636E;&#x4E92;&#x4E0D;&#x5E72;&#x6270;&#xFF0C;&#x6709;&#x4E13;&#x95E8;&#x901A;&#x4FE1;&#x65B9;&#x6CD5;&#xFF1B;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x901A;&#x4FE1;</li>
<li>&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x5206;&#x652F;&#x7EBF;&#x7A0B;&#xFF0C;&#x4E24;&#x8005;&#x6709;&#x5305;&#x542B;&#x5173;&#x7CFB;</li>
<li>&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5171;&#x4EAB;&#x8FDB;&#x7A0B;&#x8D44;&#x6E90;&#xFF0C;&#x5728;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x64CD;&#x4F5C;&#x65F6;&#x5F80;&#x5F80;&#x9700;&#x8981;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x5904;&#x7406;</li>
<li>&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x5728;&#x7CFB;&#x7EDF;&#x4E2D;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x7279;&#x6709;&#x5C5E;&#x6027;&#x6807;&#x5FD7;&#xFF0C;&#x5982;ID,&#x4EE3;&#x7801;&#x6BB5;&#xFF0C;&#x547D;&#x4EE4;&#x96C6;&#x7B49;&#x3002;</li>
</ol>
<h3 class="mume-header" id="%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF">&#x4F7F;&#x7528;&#x573A;&#x666F;</h3>

<ol>
<li>
<p>&#x4EFB;&#x52A1;&#x573A;&#x666F;&#xFF1A;&#x5982;&#x679C;&#x662F;&#x76F8;&#x5BF9;&#x72EC;&#x7ACB;&#x7684;&#x4EFB;&#x52A1;&#x6A21;&#x5757;&#xFF0C;&#x53EF;&#x80FD;&#x4F7F;&#x7528;&#x591A;&#x8FDB;&#x7A0B;&#xFF0C;&#x5982;&#x679C;&#x662F;&#x591A;&#x4E2A;&#x5206;&#x652F;&#x5171;&#x540C;&#x5F62;&#x6210;&#x4E00;&#x4E2A;&#x6574;&#x4F53;&#x4EFB;&#x52A1;&#x53EF;&#x80FD;&#x7528;&#x591A;&#x7EBF;&#x7A0B;</p>
</li>
<li>
<p>&#x9879;&#x76EE;&#x7ED3;&#x6784;&#xFF1A;&#x591A;&#x79CD;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x5B9E;&#x73B0;&#x4E0D;&#x540C;&#x4EFB;&#x52A1;&#x6A21;&#x5757;&#xFF0C;&#x53EF;&#x80FD;&#x662F;&#x591A;&#x8FDB;&#x7A0B;&#xFF0C;&#x6216;&#x8005;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x5E94;&#x8BE5;&#x5404;&#x81EA;&#x4E3A;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x3002;</p>
</li>
<li>
<p>&#x96BE;&#x6613;&#x7A0B;&#x5EA6;&#xFF1A;&#x901A;&#x4FE1;&#x96BE;&#x5EA6;&#xFF0C;&#x6570;&#x636E;&#x5904;&#x7406;&#x7684;&#x590D;&#x6742;&#x5EA6;&#x6765;&#x5224;&#x65AD;&#x7528;&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x8FD8;&#x662F;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x65B9;&#x6CD5;&#x3002;</p>
</li>
</ol>
<h3 class="mume-header" id="%E8%A6%81%E6%B1%82">&#x8981;&#x6C42;</h3>

<ol>
<li>&#x5BF9;&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x600E;&#x4E48;&#x7406;&#x89E3;/&#x8BF4;&#x8BF4;&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x7684;&#x5DEE;&#x5F02;</li>
<li>&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x77E5;&#x9053;&#x54EA;&#x4E9B;&#xFF0C;&#x6709;&#x4EC0;&#x4E48;&#x7279;&#x70B9;</li>
<li>&#x4EC0;&#x4E48;&#x662F;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#xFF0C;&#x4F60;&#x4EC0;&#x4E48;&#x60C5;&#x51B5;&#x4E0B;&#x4F7F;&#x7528;&#xFF0C;&#x600E;&#x4E48;&#x7528;</li>
<li>&#x7ED9;&#x4E00;&#x4E2A;&#x60C5;&#x5F62;&#xFF0C;&#x8BF4;&#x8BF4;&#x7528;&#x8FDB;&#x7A0B;&#x8FD8;&#x662F;&#x7EBF;&#x7A0B;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;</li>
<li>&#x95EE;&#x4E00;&#x4E9B;&#x6982;&#x5FF5;&#xFF0C;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x7684;&#x5904;&#x7406;&#xFF0C;GIL&#x95EE;&#x9898;&#xFF0C;&#x8FDB;&#x7A0B;&#x72B6;&#x6001;</li>
</ol>
<h2 class="mume-header" id="%E5%B9%B6%E5%8F%91%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9E%8B">&#x5E76;&#x53D1;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x6A21;&#x578B;</h2>

<h3 class="mume-header" id="%E5%B8%B8%E8%A7%81%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%9E%8B">&#x5E38;&#x89C1;&#x7F51;&#x7EDC;&#x6A21;&#x578B;</h3>

<ol>
<li>&#x5FAA;&#x73AF;&#x670D;&#x52A1;&#x5668;&#x6A21;&#x578B; &#xFF1A;&#x5FAA;&#x73AF;&#x63A5;&#x6536;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;&#xFF0C;&#x5904;&#x7406;&#x8BF7;&#x6C42;&#x3002;&#x540C;&#x4E00;&#x65F6;&#x523B;&#x53EA;&#x80FD;&#x5904;&#x7406;&#x4E00;&#x4E2A;&#x8BF7;&#x6C42;&#xFF0C;&#x5904;&#x7406;&#x5B8C;&#x6BD5;&#x540E;&#x518D;&#x5904;&#x7406;&#x4E0B;&#x4E00;&#x4E2A;&#x3002;</li>
</ol>
<blockquote>
<p>&#x4F18;&#x70B9;&#xFF1A;&#x5B9E;&#x73B0;&#x7B80;&#x5355;&#xFF0C;&#x5360;&#x7528;&#x8D44;&#x6E90;&#x5C11;<br>
&#x7F3A;&#x70B9;&#xFF1A;&#x65E0;&#x6CD5;&#x540C;&#x65F6;&#x5904;&#x7406;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;</p>
</blockquote>
<blockquote>
<p>&#x9002;&#x7528;&#x60C5;&#x51B5;&#xFF1A;&#x5904;&#x7406;&#x7684;&#x4EFB;&#x52A1;&#x53EF;&#x4EE5;&#x5F88;&#x5FEB;&#x5B8C;&#x6210;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x65E0;&#x9700;&#x957F;&#x671F;&#x5360;&#x7528;&#x670D;&#x52A1;&#x7AEF;&#x7A0B;&#x5E8F;&#x3002;udp&#x6BD4;tcp&#x66F4;&#x9002;&#x5408;&#x5FAA;&#x73AF;&#x3002;</p>
</blockquote>
<ol start="2">
<li>&#x591A;&#x8FDB;&#x7A0B;/&#x7EBF;&#x7A0B;&#x7F51;&#x7EDC;&#x5E76;&#x53D1;&#x6A21;&#x578B;&#xFF1A;&#x6BCF;&#x5F53;&#x4E00;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x5C31;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x8FDB;&#x7A0B;/&#x7EBF;&#x7A0B;&#x4E3A;&#x8BE5;&#x5BA2;&#x6237;&#x7AEF;&#x670D;&#x52A1;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x9000;&#x51FA;&#x65F6;&#x518D;&#x9500;&#x6BC1;&#x8BE5;&#x8FDB;&#x7A0B;/&#x7EBF;&#x7A0B;&#x3002;</li>
</ol>
<blockquote>
<p>&#x4F18;&#x70B9;&#xFF1A;&#x80FD;&#x540C;&#x65F6;&#x6EE1;&#x8DB3;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x957F;&#x671F;&#x5360;&#x6709;&#x670D;&#x52A1;&#x7AEF;&#x9700;&#x6C42;&#xFF0C;&#x53EF;&#x4EE5;&#x5904;&#x7406;&#x5404;&#x79CD;&#x8BF7;&#x6C42;&#x3002;<br>
&#x7F3A;&#x70B9;&#xFF1A; &#x8D44;&#x6E90;&#x6D88;&#x8017;&#x8F83;&#x5927;</p>
</blockquote>
<blockquote>
<p>&#x9002;&#x7528;&#x60C5;&#x51B5;&#xFF1A;&#x5BA2;&#x6237;&#x7AEF;&#x540C;&#x65F6;&#x8FDE;&#x63A5;&#x91CF;&#x8F83;&#x5C11;&#xFF0C;&#x9700;&#x8981;&#x5904;&#x7406;&#x884C;&#x4E3A;&#x8F83;&#x590D;&#x6742;&#x60C5;&#x51B5;&#x3002;</p>
</blockquote>
<ol start="3">
<li>
<p>IO&#x5E76;&#x53D1;&#x6A21;&#x578B;&#xFF1A;&#x5229;&#x7528;IO&#x591A;&#x8DEF;&#x590D;&#x7528;,&#x5F02;&#x6B65;IO&#x7B49;&#x6280;&#x672F;&#xFF0C;&#x540C;&#x65F6;&#x5904;&#x7406;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;IO&#x8BF7;&#x6C42;&#x3002;</p>
<blockquote>
<p>&#x4F18;&#x70B9; &#xFF1A; &#x8D44;&#x6E90;&#x6D88;&#x8017;&#x5C11;&#xFF0C;&#x80FD;&#x540C;&#x65F6;&#x9AD8;&#x6548;&#x5904;&#x7406;&#x591A;&#x4E2A;IO&#x884C;&#x4E3A;<br>
&#x7F3A;&#x70B9; &#xFF1A; &#x53EA;&#x80FD;&#x5904;&#x7406;&#x5E76;&#x53D1;&#x4EA7;&#x751F;&#x7684;IO&#x4E8B;&#x4EF6;&#xFF0C;&#x65E0;&#x6CD5;&#x5904;&#x7406;cpu&#x8BA1;&#x7B97;</p>
</blockquote>
<blockquote>
<p>&#x9002;&#x7528;&#x60C5;&#x51B5;&#xFF1A;HTTP&#x8BF7;&#x6C42;&#xFF0C;&#x7F51;&#x7EDC;&#x4F20;&#x8F93;&#x7B49;&#x90FD;&#x662F;IO&#x884C;&#x4E3A;&#x3002;</p>
</blockquote>
</li>
</ol>
<h3 class="mume-header" id="%E5%9F%BA%E4%BA%8Efork%E7%9A%84%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BD%91%E7%BB%9C%E5%B9%B6%E5%8F%91%E6%A8%A1%E5%9E%8B">&#x57FA;&#x4E8E;fork&#x7684;&#x591A;&#x8FDB;&#x7A0B;&#x7F51;&#x7EDC;&#x5E76;&#x53D1;&#x6A21;&#x578B;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day10/fork_server.py</strong></em></p>
<h4 class="mume-header" id="%E5%AE%9E%E7%8E%B0%E6%AD%A5%E9%AA%A4">&#x5B9E;&#x73B0;&#x6B65;&#x9AA4;</h4>

<ol>
<li>&#x521B;&#x5EFA;&#x76D1;&#x542C;&#x5957;&#x63A5;&#x5B57;</li>
<li>&#x7B49;&#x5F85;&#x63A5;&#x6536;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;</li>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x8FDB;&#x7A0B;&#x5904;&#x7406;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;</li>
<li>&#x539F;&#x8FDB;&#x7A0B;&#x7EE7;&#x7EED;&#x7B49;&#x5F85;&#x5176;&#x4ED6;&#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;</li>
<li>&#x5982;&#x679C;&#x5BA2;&#x6237;&#x7AEF;&#x9000;&#x51FA;&#xFF0C;&#x5219;&#x9500;&#x6BC1;&#x5BF9;&#x5E94;&#x7684;&#x8FDB;&#x7A0B;</li>
</ol>
<h3 class="mume-header" id="%E5%9F%BA%E4%BA%8Ethreading%E7%9A%84%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%BD%91%E7%BB%9C%E5%B9%B6%E5%8F%91">&#x57FA;&#x4E8E;threading&#x7684;&#x591A;&#x7EBF;&#x7A0B;&#x7F51;&#x7EDC;&#x5E76;&#x53D1;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day10/thread_server.py</strong></em></p>
<h4 class="mume-header" id="%E5%AE%9E%E7%8E%B0%E6%AD%A5%E9%AA%A4-1">&#x5B9E;&#x73B0;&#x6B65;&#x9AA4;</h4>

<ol>
<li>&#x521B;&#x5EFA;&#x76D1;&#x542C;&#x5957;&#x63A5;&#x5B57;</li>
<li>&#x5FAA;&#x73AF;&#x63A5;&#x6536;&#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;</li>
<li>&#x5F53;&#x6709;&#x65B0;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x5904;&#x7406;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;</li>
<li>&#x4E3B;&#x7EBF;&#x7A0B;&#x7EE7;&#x7EED;&#x7B49;&#x5F85;&#x5176;&#x4ED6;&#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;</li>
<li>&#x5F53;&#x5BA2;&#x6237;&#x7AEF;&#x9000;&#x51FA;&#xFF0C;&#x5219;&#x5BF9;&#x5E94;&#x5206;&#x652F;&#x7EBF;&#x7A0B;&#x9000;&#x51FA;</li>
</ol>
<h3 class="mume-header" id="ftp-%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8">ftp &#x6587;&#x4EF6;&#x670D;&#x52A1;&#x5668;</h3>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day11/ftp</strong></em></p>
<ol>
<li>&#x529F;&#x80FD;<br>
&#x3010;1&#x3011; &#x5206;&#x4E3A;&#x670D;&#x52A1;&#x7AEF;&#x548C;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x8981;&#x6C42;&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x540C;&#x65F6;&#x64CD;&#x4F5C;&#x3002;<br>
&#x3010;2&#x3011; &#x5BA2;&#x6237;&#x7AEF;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x670D;&#x52A1;&#x5668;&#x6587;&#x4EF6;&#x5E93;&#x4E2D;&#x6709;&#x4EC0;&#x4E48;&#x6587;&#x4EF6;&#x3002;<br>
&#x3010;3&#x3011; &#x5BA2;&#x6237;&#x7AEF;&#x53EF;&#x4EE5;&#x4ECE;&#x6587;&#x4EF6;&#x5E93;&#x4E2D;&#x4E0B;&#x8F7D;&#x6587;&#x4EF6;&#x5230;&#x672C;&#x5730;&#x3002;<br>
&#x3010;4&#x3011; &#x5BA2;&#x6237;&#x7AEF;&#x53EF;&#x4EE5;&#x4E0A;&#x4F20;&#x4E00;&#x4E2A;&#x672C;&#x5730;&#x6587;&#x4EF6;&#x5230;&#x6587;&#x4EF6;&#x5E93;&#x3002;<br>
&#x3010;5&#x3011; &#x4F7F;&#x7528;print&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x6253;&#x5370;&#x547D;&#x4EE4;&#x8F93;&#x5165;&#x63D0;&#x793A;&#xFF0C;&#x5F15;&#x5BFC;&#x64CD;&#x4F5C;</li>
</ol>
<h2 class="mume-header" id="io%E5%B9%B6%E5%8F%91">IO&#x5E76;&#x53D1;</h2>

<h3 class="mume-header" id="io-%E5%88%86%E7%B1%BB">IO &#x5206;&#x7C7B;</h3>

<blockquote>
<p>IO&#x5206;&#x7C7B;&#xFF1A;&#x963B;&#x585E;IO &#xFF0C;&#x975E;&#x963B;&#x585E;IO&#xFF0C;IO&#x591A;&#x8DEF;&#x590D;&#x7528;&#xFF0C;&#x5F02;&#x6B65;IO&#x7B49;</p>
</blockquote>
<h4 class="mume-header" id="%E9%98%BB%E5%A1%9Eio">&#x963B;&#x585E;IO</h4>

<p>1.&#x5B9A;&#x4E49;&#xFF1A;&#x5728;&#x6267;&#x884C;IO&#x64CD;&#x4F5C;&#x65F6;&#x5982;&#x679C;&#x6267;&#x884C;&#x6761;&#x4EF6;&#x4E0D;&#x6EE1;&#x8DB3;&#x5219;&#x963B;&#x585E;&#x3002;&#x963B;&#x585E;IO&#x662F;IO&#x7684;&#x9ED8;&#x8BA4;&#x5F62;&#x6001;&#x3002;</p>
<p>2.&#x6548;&#x7387;&#xFF1A;&#x963B;&#x585E;IO&#x662F;&#x6548;&#x7387;&#x5F88;&#x4F4E;&#x7684;&#x4E00;&#x79CD;IO&#x3002;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x903B;&#x8F91;&#x7B80;&#x5355;&#x6240;&#x4EE5;&#x662F;&#x9ED8;&#x8BA4;IO&#x884C;&#x4E3A;&#x3002;</p>
<p>3.&#x963B;&#x585E;&#x60C5;&#x51B5;&#xFF1A;</p>
<ul>
<li>
<p>&#x56E0;&#x4E3A;&#x67D0;&#x79CD;&#x6267;&#x884C;&#x6761;&#x4EF6;&#x6CA1;&#x6709;&#x6EE1;&#x8DB3;&#x9020;&#x6210;&#x7684;&#x51FD;&#x6570;&#x963B;&#x585E;<br>
e.g.  accept   input   recv</p>
</li>
<li>
<p>&#x5904;&#x7406;IO&#x7684;&#x65F6;&#x95F4;&#x8F83;&#x957F;&#x4EA7;&#x751F;&#x7684;&#x963B;&#x585E;&#x72B6;&#x6001;<br>
e.g. &#x7F51;&#x7EDC;&#x4F20;&#x8F93;&#xFF0C;&#x5927;&#x6587;&#x4EF6;&#x8BFB;&#x5199;</p>
</li>
</ul>
<h4 class="mume-header" id="%E9%9D%9E%E9%98%BB%E5%A1%9Eio">&#x975E;&#x963B;&#x585E;IO</h4>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day11/block_io</strong></em></p>
<ol>
<li>&#x5B9A;&#x4E49; &#xFF1A;&#x901A;&#x8FC7;&#x4FEE;&#x6539;IO&#x5C5E;&#x6027;&#x884C;&#x4E3A;&#xFF0C;&#x4F7F;&#x539F;&#x672C;&#x963B;&#x585E;&#x7684;IO&#x53D8;&#x4E3A;&#x975E;&#x963B;&#x585E;&#x7684;&#x72B6;&#x6001;&#x3002;</li>
</ol>
<ul>
<li>&#x8BBE;&#x7F6E;&#x5957;&#x63A5;&#x5B57;&#x4E3A;&#x975E;&#x963B;&#x585E;IO</li>
</ul>
<blockquote>
<p>sockfd.setblocking(bool)<br>
&#x529F;&#x80FD;&#xFF1A;&#x8BBE;&#x7F6E;&#x5957;&#x63A5;&#x5B57;&#x4E3A;&#x975E;&#x963B;&#x585E;IO<br>
&#x53C2;&#x6570;&#xFF1A;&#x9ED8;&#x8BA4;&#x4E3A;True&#xFF0C;&#x8868;&#x793A;&#x5957;&#x63A5;&#x5B57;IO&#x963B;&#x585E;&#xFF1B;&#x8BBE;&#x7F6E;&#x4E3A;False&#x5219;&#x5957;&#x63A5;&#x5B57;IO&#x53D8;&#x4E3A;&#x975E;&#x963B;&#x585E;</p>
</blockquote>
<ul>
<li>
<p>&#x8D85;&#x65F6;&#x68C0;&#x6D4B; &#xFF1A;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x6700;&#x957F;&#x963B;&#x585E;&#x65F6;&#x95F4;&#xFF0C;&#x8D85;&#x8FC7;&#x8BE5;&#x65F6;&#x95F4;&#x540E;&#x5219;&#x4E0D;&#x518D;&#x963B;&#x585E;&#x7B49;&#x5F85;&#x3002;</p>
<blockquote>
<p>sockfd.settimeout(sec)<br>
&#x529F;&#x80FD;&#xFF1A;&#x8BBE;&#x7F6E;&#x5957;&#x63A5;&#x5B57;&#x7684;&#x8D85;&#x65F6;&#x65F6;&#x95F4;<br>
&#x53C2;&#x6570;&#xFF1A;&#x8BBE;&#x7F6E;&#x7684;&#x65F6;&#x95F4;</p>
</blockquote>
</li>
</ul>
<h3 class="mume-header" id="io%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8">IO&#x591A;&#x8DEF;&#x590D;&#x7528;</h3>

<ol>
<li>&#x5B9A;&#x4E49;</li>
</ol>
<blockquote>
<p>&#x540C;&#x65F6;&#x76D1;&#x63A7;&#x591A;&#x4E2A;IO&#x4E8B;&#x4EF6;&#xFF0C;&#x5F53;&#x54EA;&#x4E2A;IO&#x4E8B;&#x4EF6;&#x51C6;&#x5907;&#x5C31;&#x7EEA;&#x5C31;&#x6267;&#x884C;&#x54EA;&#x4E2A;IO&#x4E8B;&#x4EF6;&#x3002;&#x4EE5;&#x6B64;&#x5F62;&#x6210;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x5904;&#x7406;&#x591A;&#x4E2A;IO&#x7684;&#x884C;&#x4E3A;&#xFF0C;&#x907F;&#x514D;&#x4E00;&#x4E2A;IO&#x963B;&#x585E;&#x9020;&#x6210;&#x5176;&#x4ED6;IO&#x5747;&#x65E0;&#x6CD5;&#x6267;&#x884C;&#xFF0C;&#x63D0;&#x9AD8;&#x4E86;IO&#x6267;&#x884C;&#x6548;&#x7387;&#x3002;</p>
</blockquote>
<ol start="2">
<li>&#x5177;&#x4F53;&#x65B9;&#x6848;</li>
</ol>
<blockquote>
<p>select&#x65B9;&#x6CD5; &#xFF1A; windows  linux  unix<br>
poll&#x65B9;&#x6CD5;&#xFF1A; linux  unix<br>
epoll&#x65B9;&#x6CD5;&#xFF1A; linux</p>
</blockquote>
<h4 class="mume-header" id="select-%E6%96%B9%E6%B3%95">select &#x65B9;&#x6CD5;</h4>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day11/select_server.py</strong></em></p>
<pre data-role="codeBlock" data-info="python" class="language-python">rs<span class="token punctuation">,</span> ws<span class="token punctuation">,</span> xs<span class="token operator">=</span>select<span class="token punctuation">(</span>rlist<span class="token punctuation">,</span> wlist<span class="token punctuation">,</span> xlist<span class="token punctuation">[</span><span class="token punctuation">,</span> timeout<span class="token punctuation">]</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x76D1;&#x63A7;IO&#x4E8B;&#x4EF6;&#xFF0C;&#x963B;&#x585E;&#x7B49;&#x5F85;IO&#x53D1;&#x751F;
&#x53C2;&#x6570;&#xFF1A;rlist  &#x5217;&#x8868;  &#x5B58;&#x653E;&#x5173;&#x6CE8;&#x7684;&#x7B49;&#x5F85;&#x53D1;&#x751F;&#x7684;IO&#x4E8B;&#x4EF6;
      wlist  &#x5217;&#x8868;  &#x5B58;&#x653E;&#x5173;&#x6CE8;&#x7684;&#x8981;&#x4E3B;&#x52A8;&#x5904;&#x7406;&#x7684;IO&#x4E8B;&#x4EF6;
      xlist  &#x5217;&#x8868;  &#x5B58;&#x653E;&#x5173;&#x6CE8;&#x7684;&#x51FA;&#x73B0;&#x5F02;&#x5E38;&#x8981;&#x5904;&#x7406;&#x7684;IO
      timeout  &#x8D85;&#x65F6;&#x65F6;&#x95F4;

&#x8FD4;&#x56DE;&#x503C;&#xFF1A; rs &#x5217;&#x8868;  rlist&#x4E2D;&#x51C6;&#x5907;&#x5C31;&#x7EEA;&#x7684;IO
        ws &#x5217;&#x8868;  wlist&#x4E2D;&#x51C6;&#x5907;&#x5C31;&#x7EEA;&#x7684;IO
	xs &#x5217;&#x8868;  xlist&#x4E2D;&#x51C6;&#x5907;&#x5C31;&#x7EEA;&#x7684;IO
</pre><p>select &#x5B9E;&#x73B0;tcp&#x670D;&#x52A1;</p>
<pre class="language-text">&#x3010;1&#x3011; &#x5C06;&#x5173;&#x6CE8;&#x7684;IO&#x653E;&#x5165;&#x5BF9;&#x5E94;&#x7684;&#x76D1;&#x63A7;&#x7C7B;&#x522B;&#x5217;&#x8868;
&#x3010;2&#x3011;&#x901A;&#x8FC7;select&#x51FD;&#x6570;&#x8FDB;&#x884C;&#x76D1;&#x63A7;
&#x3010;3&#x3011;&#x904D;&#x5386;select&#x8FD4;&#x56DE;&#x503C;&#x5217;&#x8868;&#xFF0C;&#x786E;&#x5B9A;&#x5C31;&#x7EEA;IO&#x4E8B;&#x4EF6;
&#x3010;4&#x3011;&#x5904;&#x7406;&#x53D1;&#x751F;&#x7684;IO&#x4E8B;&#x4EF6;
</pre>
<blockquote>
<p>&#x6CE8;&#x610F;</p>
<blockquote>
<p>wlist&#x4E2D;&#x5982;&#x679C;&#x5B58;&#x5728;IO&#x4E8B;&#x4EF6;&#xFF0C;&#x5219;select&#x7ACB;&#x5373;&#x8FD4;&#x56DE;&#x7ED9;ws<br>
&#x5904;&#x7406;IO&#x8FC7;&#x7A0B;&#x4E2D;&#x4E0D;&#x8981;&#x51FA;&#x73B0;&#x6B7B;&#x5FAA;&#x73AF;&#x5360;&#x6709;&#x670D;&#x52A1;&#x7AEF;&#x7684;&#x60C5;&#x51B5;<br>
IO&#x591A;&#x8DEF;&#x590D;&#x7528;&#x6D88;&#x8017;&#x8D44;&#x6E90;&#x8F83;&#x5C11;&#xFF0C;&#x6548;&#x7387;&#x8F83;&#x9AD8;</p>
</blockquote>
</blockquote>
<hr>
<h3 class="mume-header" id="%E6%89%A9%E5%B1%95-%E4%BD%8D%E8%BF%90%E7%AE%97">@@&#x6269;&#x5C55;: &#x4F4D;&#x8FD0;&#x7B97;</h3>

<p>&#x5B9A;&#x4E49; &#xFF1A; &#x5C06;&#x6574;&#x6570;&#x8F6C;&#x6362;&#x4E3A;&#x4E8C;&#x8FDB;&#x5236;&#xFF0C;&#x6309;&#x4E8C;&#x8FDB;&#x5236;&#x4F4D;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;</p>
<p>&#x8FD0;&#x7B97;&#x7B26;&#x53F7;&#xFF1A;</p>
<blockquote>
<pre class="language-text">  &amp;  &#x6309;&#x4F4D;&#x4E0E;
  |  &#x6309;&#x4F4D;&#x6216;
  ^  &#x6309;&#x4F4D;&#x5F02;&#x6216;
  &lt;&lt; &#x5DE6;&#x79FB;
  &gt;&gt; &#x53F3;&#x79FB;
</pre>
</blockquote>
<pre data-role="codeBlock" data-info="python" class="language-python">e<span class="token punctuation">.</span>g<span class="token punctuation">.</span>  <span class="token number">14</span> <span class="token operator">-</span><span class="token operator">-</span><span class="token operator">&gt;</span> <span class="token number">01110</span>
      <span class="token number">19</span> <span class="token operator">-</span><span class="token operator">-</span><span class="token operator">&gt;</span> <span class="token number">10011</span>

<span class="token number">14</span> <span class="token operator">&amp;</span> <span class="token number">19</span> <span class="token operator">=</span> <span class="token number">00010</span> <span class="token operator">=</span> <span class="token number">2</span>  &#x4E00;<span class="token number">0</span>&#x5219;<span class="token number">0</span>
<span class="token number">14</span> <span class="token operator">|</span> <span class="token number">19</span> <span class="token operator">=</span> <span class="token number">11111</span> <span class="token operator">=</span> <span class="token number">31</span> &#x4E00;<span class="token number">1</span>&#x5219;<span class="token number">1</span>
<span class="token number">14</span> <span class="token operator">^</span> <span class="token number">19</span> <span class="token operator">=</span> <span class="token number">11101</span> <span class="token operator">=</span> <span class="token number">29</span> &#x76F8;&#x540C;&#x4E3A;<span class="token number">0</span>&#x4E0D;&#x540C;&#x4E3A;<span class="token number">1</span>
<span class="token number">14</span> <span class="token operator">&lt;&lt;</span> <span class="token number">2</span> <span class="token operator">=</span> <span class="token number">111000</span> <span class="token operator">=</span> <span class="token number">56</span> &#x5411;&#x5DE6;&#x79FB;&#x52A8;&#x4F4E;&#x4F4D;&#x8865;<span class="token number">0</span>
<span class="token number">14</span> <span class="token operator">&gt;&gt;</span> <span class="token number">2</span> <span class="token operator">=</span> <span class="token number">11</span> <span class="token operator">=</span> <span class="token number">3</span>  &#x5411;&#x53F3;&#x79FB;&#x52A8;&#x53BB;&#x6389;&#x4F4E;&#x4F4D;
</pre><hr>
<h4 class="mume-header" id="poll%E6%96%B9%E6%B3%95">poll&#x65B9;&#x6CD5;</h4>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day12/poll_server.py</strong></em></p>
<pre data-role="codeBlock" data-info="python" class="language-python">p <span class="token operator">=</span> select<span class="token punctuation">.</span>poll<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD; &#xFF1A; &#x521B;&#x5EFA;poll&#x5BF9;&#x8C61;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; poll&#x5BF9;&#x8C61;
</pre><pre data-role="codeBlock" data-info="python" class="language-python">p<span class="token punctuation">.</span>register<span class="token punctuation">(</span>fd<span class="token punctuation">,</span>event<span class="token punctuation">)</span>   
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x6CE8;&#x518C;&#x5173;&#x6CE8;&#x7684;IO&#x4E8B;&#x4EF6;
&#x53C2;&#x6570;&#xFF1A;fd  &#x8981;&#x5173;&#x6CE8;&#x7684;IO
      event  &#x8981;&#x5173;&#x6CE8;&#x7684;IO&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;
  	     &#x5E38;&#x7528;&#x7C7B;&#x578B;&#xFF1A;POLLIN  &#x8BFB;IO&#x4E8B;&#x4EF6;&#xFF08;rlist&#xFF09;
		      POLLOUT &#x5199;IO&#x4E8B;&#x4EF6; <span class="token punctuation">(</span>wlist<span class="token punctuation">)</span>
		      POLLERR &#x5F02;&#x5E38;IO  &#xFF08;xlist&#xFF09;
		      POLLHUP &#x65AD;&#x5F00;&#x8FDE;&#x63A5; 
		  e<span class="token punctuation">.</span>g<span class="token punctuation">.</span> p<span class="token punctuation">.</span>register<span class="token punctuation">(</span>sockfd<span class="token punctuation">,</span>POLLIN<span class="token operator">|</span>POLLERR<span class="token punctuation">)</span>

p<span class="token punctuation">.</span>unregister<span class="token punctuation">(</span>fd<span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A;&#x53D6;&#x6D88;&#x5BF9;IO&#x7684;&#x5173;&#x6CE8;
&#x53C2;&#x6570;&#xFF1A;IO&#x5BF9;&#x8C61;&#x6216;&#x8005;IO&#x5BF9;&#x8C61;&#x7684;fileno
</pre><pre data-role="codeBlock" data-info="python" class="language-python">events <span class="token operator">=</span> p<span class="token punctuation">.</span>poll<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A; &#x963B;&#x585E;&#x7B49;&#x5F85;&#x76D1;&#x63A7;&#x7684;IO&#x4E8B;&#x4EF6;&#x53D1;&#x751F;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; &#x8FD4;&#x56DE;&#x53D1;&#x751F;&#x7684;IO
        events&#x683C;&#x5F0F;  <span class="token punctuation">[</span><span class="token punctuation">(</span>fileno<span class="token punctuation">,</span>event<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span>
        &#x6BCF;&#x4E2A;&#x5143;&#x7EC4;&#x4E3A;&#x4E00;&#x4E2A;&#x5C31;&#x7EEA;IO&#xFF0C;&#x5143;&#x7EC4;&#x7B2C;&#x4E00;&#x9879;&#x662F;&#x8BE5;IO&#x7684;fileno&#xFF0C;&#x7B2C;&#x4E8C;&#x9879;&#x4E3A;&#x8BE5;IO&#x5C31;&#x7EEA;&#x7684;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;
</pre><p>poll_server &#x6B65;&#x9AA4;</p>
<pre class="language-text">&#x3010;1&#x3011; &#x521B;&#x5EFA;&#x5957;&#x63A5;&#x5B57;
&#x3010;2&#x3011; &#x5C06;&#x5957;&#x63A5;&#x5B57;register
&#x3010;3&#x3011; &#x521B;&#x5EFA;&#x67E5;&#x627E;&#x5B57;&#x5178;&#xFF0C;&#x5E76;&#x7EF4;&#x62A4;
&#x3010;4&#x3011; &#x5FAA;&#x73AF;&#x76D1;&#x63A7;IO&#x53D1;&#x751F;
&#x3010;5&#x3011; &#x5904;&#x7406;&#x53D1;&#x751F;&#x7684;IO
</pre>
<h4 class="mume-header" id="epoll%E6%96%B9%E6%B3%95">epoll&#x65B9;&#x6CD5;</h4>

<p><em><strong>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;: day12/epoll_server.py</strong></em></p>
<ol>
<li>
<p>&#x4F7F;&#x7528;&#x65B9;&#x6CD5; &#xFF1A; &#x57FA;&#x672C;&#x4E0E;poll&#x76F8;&#x540C;</p>
<ul>
<li>&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x6539;&#x4E3A; epoll()</li>
<li>&#x5C06;&#x6240;&#x6709;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x6539;&#x4E3A;EPOLL&#x7C7B;&#x578B;</li>
</ul>
</li>
<li>
<p>epoll&#x7279;&#x70B9;</p>
<ul>
<li>epoll &#x6548;&#x7387;&#x6BD4;select poll&#x8981;&#x9AD8;</li>
<li>epoll &#x76D1;&#x63A7;IO&#x6570;&#x91CF;&#x6BD4;select&#x8981;&#x591A;</li>
<li>epoll &#x7684;&#x89E6;&#x53D1;&#x65B9;&#x5F0F;&#x6BD4;poll&#x8981;&#x591A; &#xFF08;EPOLLET&#x8FB9;&#x7F18;&#x89E6;&#x53D1;&#xFF09;</li>
</ul>
</li>
</ol>
<h3 class="mume-header" id="%E5%8D%8F%E7%A8%8B%E6%8A%80%E6%9C%AF">&#x534F;&#x7A0B;&#x6280;&#x672F;</h3>

<h4 class="mume-header" id="%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5">&#x57FA;&#x7840;&#x6982;&#x5FF5;</h4>

<ol>
<li>
<p>&#x5B9A;&#x4E49;&#xFF1A;&#x7EA4;&#x7A0B;&#xFF0C;&#x5FAE;&#x7EBF;&#x7A0B;&#x3002;&#x662F;&#x5141;&#x8BB8;&#x5728;&#x4E0D;&#x540C;&#x5165;&#x53E3;&#x70B9;&#x4E0D;&#x540C;&#x4F4D;&#x7F6E;&#x6682;&#x505C;&#x6216;&#x5F00;&#x59CB;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#x7A0B;&#x5E8F;&#xFF0C;&#x7B80;&#x5355;&#x6765;&#x8BF4;&#xFF0C;&#x534F;&#x7A0B;&#x5C31;&#x662F;&#x53EF;&#x4EE5;&#x6682;&#x505C;&#x6267;&#x884C;&#x7684;&#x51FD;&#x6570;&#x3002;</p>
</li>
<li>
<p>&#x534F;&#x7A0B;&#x539F;&#x7406; &#xFF1A; &#x8BB0;&#x5F55;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x7684;&#x4E0A;&#x4E0B;&#x6587;&#xFF0C;&#x534F;&#x7A0B;&#x8C03;&#x5EA6;&#x5207;&#x6362;&#x65F6;&#x4F1A;&#x5C06;&#x8BB0;&#x5F55;&#x7684;&#x4E0A;&#x4E0B;&#x6587;&#x4FDD;&#x5B58;&#xFF0C;&#x5728;&#x5207;&#x6362;&#x56DE;&#x6765;&#x65F6;&#x8FDB;&#x884C;&#x8C03;&#x53D6;&#xFF0C;&#x6062;&#x590D;&#x539F;&#x6709;&#x7684;&#x6267;&#x884C;&#x5185;&#x5BB9;&#xFF0C;&#x4EE5;&#x4FBF;&#x4ECE;&#x4E0A;&#x4E00;&#x6B21;&#x6267;&#x884C;&#x4F4D;&#x7F6E;&#x7EE7;&#x7EED;&#x6267;&#x884C;&#x3002;</p>
</li>
<li>
<p>&#x534F;&#x7A0B;&#x4F18;&#x7F3A;&#x70B9;</p>
</li>
</ol>
<blockquote>
<p>&#x4F18;&#x70B9;</p>
<blockquote>
<ol>
<li>&#x534F;&#x7A0B;&#x5B8C;&#x6210;&#x591A;&#x4EFB;&#x52A1;&#x5360;&#x7528;&#x8BA1;&#x7B97;&#x8D44;&#x6E90;&#x5F88;&#x5C11;</li>
<li>&#x7531;&#x4E8E;&#x534F;&#x7A0B;&#x7684;&#x591A;&#x4EFB;&#x52A1;&#x5207;&#x6362;&#x5728;&#x5E94;&#x7528;&#x5C42;&#x5B8C;&#x6210;&#xFF0C;&#x56E0;&#x6B64;&#x5207;&#x6362;&#x5F00;&#x9500;&#x5C11;</li>
<li>&#x534F;&#x7A0B;&#x4E3A;&#x5355;&#x7EBF;&#x7A0B;&#x7A0B;&#x5E8F;&#xFF0C;&#x65E0;&#x9700;&#x8FDB;&#x884C;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x540C;&#x6B65;&#x4E92;&#x65A5;&#x5904;&#x7406;</li>
</ol>
</blockquote>
</blockquote>
<blockquote>
<p>&#x7F3A;&#x70B9;</p>
<blockquote>
<p>&#x534F;&#x7A0B;&#x7684;&#x672C;&#x8D28;&#x662F;&#x4E00;&#x4E2A;&#x5355;&#x7EBF;&#x7A0B;&#xFF0C;&#x65E0;&#x6CD5;&#x5229;&#x7528;&#x8BA1;&#x7B97;&#x673A;&#x591A;&#x6838;&#x8D44;&#x6E90;</p>
</blockquote>
</blockquote>
<hr>
<h4 class="mume-header" id="%E6%89%A9%E5%B1%95%E5%BB%B6%E4%BC%B8%E6%A0%87%E5%87%86%E5%BA%93%E5%8D%8F%E7%A8%8B%E7%9A%84%E5%AE%9E%E7%8E%B0">&#x6269;&#x5C55;&#x5EF6;&#x4F38;@&#x6807;&#x51C6;&#x5E93;&#x534F;&#x7A0B;&#x7684;&#x5B9E;&#x73B0;</h4>

<p>python3.5&#x4EE5;&#x540E;&#xFF0C;&#x4F7F;&#x7528;&#x6807;&#x51C6;&#x5E93;asyncio&#x548C;async/await &#x8BED;&#x6CD5;&#x6765;&#x7F16;&#x5199;&#x5E76;&#x53D1;&#x4EE3;&#x7801;&#x3002;asyncio&#x5E93;&#x901A;&#x8FC7;&#x5BF9;&#x5F02;&#x6B65;IO&#x884C;&#x4E3A;&#x7684;&#x652F;&#x6301;&#x5B8C;&#x6210;python&#x7684;&#x534F;&#x7A0B;&#x3002;&#x867D;&#x7136;&#x5B98;&#x65B9;&#x8BF4;asyncio&#x662F;&#x672A;&#x6765;&#x7684;&#x5F00;&#x53D1;&#x65B9;&#x5411;&#xFF0C;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x5176;&#x751F;&#x6001;&#x4E0D;&#x591F;&#x4E30;&#x5BCC;&#xFF0C;&#x5927;&#x91CF;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x4E0D;&#x652F;&#x6301;awaitable&#x9700;&#x8981;&#x81EA;&#x5DF1;&#x53BB;&#x5C01;&#x88C5;&#xFF0C;&#x6240;&#x4EE5;&#x5728;&#x4F7F;&#x7528;&#x4E0A;&#x5B58;&#x5728;&#x7F3A;&#x9677;&#x3002;&#x66F4;&#x591A;&#x65F6;&#x5019;&#x53EA;&#x80FD;&#x4F7F;&#x7528;&#x5DF2;&#x6709;&#x7684;&#x5F02;&#x6B65;&#x5E93;&#xFF08;asyncio&#x7B49;&#xFF09;&#xFF0C;&#x529F;&#x80FD;&#x6709;&#x9650;</p>
<hr>
<h4 class="mume-header" id="%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8D%8F%E7%A8%8B%E6%A8%A1">&#x7B2C;&#x4E09;&#x65B9;&#x534F;&#x7A0B;&#x6A21;</h4>

<ol>
<li>greenlet&#x6A21;&#x5757;</li>
</ol>
<p><em><strong>&#x793A;&#x4F8B;&#x4EE3;&#x7801;: day12/greenlet_0.py</strong></em></p>
<ul>
<li>
<p>&#x5B89;&#x88C5; &#xFF1A; sudo  pip3 install greenlet</p>
</li>
<li>
<p>&#x51FD;&#x6570;</p>
</li>
</ul>
<pre data-role="codeBlock" data-info="python" class="language-python">greenlet<span class="token punctuation">.</span>greenlet<span class="token punctuation">(</span>func<span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A;&#x521B;&#x5EFA;&#x534F;&#x7A0B;&#x5BF9;&#x8C61;
&#x53C2;&#x6570;&#xFF1A;&#x534F;&#x7A0B;&#x51FD;&#x6570;

g<span class="token punctuation">.</span>switch<span class="token punctuation">(</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;&#xFF1A;&#x9009;&#x62E9;&#x8981;&#x6267;&#x884C;&#x7684;&#x534F;&#x7A0B;&#x51FD;&#x6570;
</pre><ol start="2">
<li>gevent&#x6A21;&#x5757;</li>
</ol>
<p><em><strong>&#x793A;&#x4F8B;&#x4EE3;&#x7801;: day12/gevent_test.py</strong></em><br>
<em><strong>&#x793A;&#x4F8B;&#x4EE3;&#x7801;: day12/gevent_server.py</strong></em></p>
<ul>
<li>
<p>&#x5B89;&#x88C5;&#xFF1A;sudo pip3 install gevent</p>
</li>
<li>
<p>&#x51FD;&#x6570;</p>
</li>
</ul>
<pre data-role="codeBlock" data-info="python" class="language-python">gevent<span class="token punctuation">.</span>spawn<span class="token punctuation">(</span>func<span class="token punctuation">,</span>argv<span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x751F;&#x6210;&#x534F;&#x7A0B;&#x5BF9;&#x8C61;
&#x53C2;&#x6570;&#xFF1A;func  &#x534F;&#x7A0B;&#x51FD;&#x6570;
     argv  &#x7ED9;&#x534F;&#x7A0B;&#x51FD;&#x6570;&#x4F20;&#x53C2;&#xFF08;&#x4E0D;&#x5B9A;&#x53C2;&#xFF09;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A; &#x534F;&#x7A0B;&#x5BF9;&#x8C61;

gevent<span class="token punctuation">.</span>joinall<span class="token punctuation">(</span><span class="token builtin">list</span><span class="token punctuation">,</span><span class="token punctuation">[</span>timeout<span class="token punctuation">]</span><span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> &#x963B;&#x585E;&#x7B49;&#x5F85;&#x534F;&#x7A0B;&#x6267;&#x884C;&#x5B8C;&#x6BD5;
&#x53C2;&#x6570;&#xFF1A;<span class="token builtin">list</span>  &#x534F;&#x7A0B;&#x5BF9;&#x8C61;&#x5217;&#x8868;
     timeout &#x8D85;&#x65F6;&#x65F6;&#x95F4;

gevent<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span>sec<span class="token punctuation">)</span>
&#x529F;&#x80FD;<span class="token punctuation">:</span> gevent&#x7761;&#x7720;&#x963B;&#x585E;
&#x53C2;&#x6570;&#xFF1A;&#x7761;&#x7720;&#x65F6;&#x95F4;

<span class="token operator">*</span> gevent&#x534F;&#x7A0B;&#x53EA;&#x6709;&#x5728;&#x9047;&#x5230;gevent&#x6307;&#x5B9A;&#x7684;&#x963B;&#x585E;&#x884C;&#x4E3A;&#x65F6;&#x624D;&#x4F1A;&#x81EA;&#x52A8;&#x5728;&#x534F;&#x7A0B;&#x4E4B;&#x95F4;&#x8FDB;&#x884C;&#x8DF3;&#x8F6C;
&#x5982;gevent<span class="token punctuation">.</span>joinall<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>gevent<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token punctuation">)</span>&#x5E26;&#x6765;&#x7684;&#x963B;&#x585E;
</pre><ul>
<li>monkey&#x811A;&#x672C;</li>
</ul>
<blockquote>
<p>&#x4F5C;&#x7528;&#xFF1A;&#x5728;gevent&#x534F;&#x7A0B;&#x4E2D;&#xFF0C;&#x534F;&#x7A0B;&#x53EA;&#x6709;&#x9047;&#x5230;gevent&#x6307;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x963B;&#x585E;&#x624D;&#x80FD;&#x8DF3;&#x8F6C;&#x5230;&#x5176;&#x4ED6;&#x534F;&#x7A0B;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x5E0C;&#x671B;&#x5C06;&#x666E;&#x901A;&#x7684;IO&#x963B;&#x585E;&#x884C;&#x4E3A;&#x8F6C;&#x6362;&#x4E3A;&#x53EF;&#x4EE5;&#x89E6;&#x53D1;gevent&#x534F;&#x7A0B;&#x8DF3;&#x8F6C;&#x7684;&#x963B;&#x585E;&#xFF0C;&#x4EE5;&#x63D0;&#x9AD8;&#x6267;&#x884C;&#x6548;&#x7387;&#x3002;</p>
</blockquote>
<blockquote>
<p>&#x8F6C;&#x6362;&#x65B9;&#x6CD5;&#xFF1A;gevent &#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x811A;&#x672C;&#x7A0B;&#x5E8F;monkey,&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x5E95;&#x5C42;&#x89E3;&#x91CA;IO&#x963B;&#x585E;&#x7684;&#x884C;&#x4E3A;&#xFF0C;&#x5C06;&#x5F88;&#x591A;&#x666E;&#x901A;&#x963B;&#x585E;&#x8F6C;&#x6362;&#x4E3A;gevent&#x963B;&#x585E;&#x3002;</p>
</blockquote>
<blockquote>
<p>&#x4F7F;&#x7528;&#x65B9;&#x6CD5;</p>
</blockquote>
<blockquote>
<blockquote>
<p>&#x3010;1&#x3011; &#x5BFC;&#x5165;monkey</p>
</blockquote>
</blockquote>
<pre class="language-text">		from gevent  import monkey
</pre>
<blockquote>
<blockquote>
<p>&#x3010;2&#x3011; &#x8FD0;&#x884C;&#x76F8;&#x5E94;&#x7684;&#x811A;&#x672C;&#xFF0C;&#x4F8B;&#x5982;&#x8F6C;&#x6362;socket&#x4E2D;&#x6240;&#x6709;&#x963B;&#x585E;</p>
</blockquote>
</blockquote>
<pre class="language-text">		monkey.patch_socket()
</pre>
<blockquote>
<blockquote>
<p>&#x3010;3&#x3011; &#x5982;&#x679C;&#x5C06;&#x6240;&#x6709;&#x53EF;&#x8F6C;&#x6362;&#x7684;IO&#x963B;&#x585E;&#x5168;&#x90E8;&#x8F6C;&#x6362;&#x5219;&#x8FD0;&#x884C;all</p>
</blockquote>
</blockquote>
<pre class="language-text">		monkey.patch_all()
</pre>
<blockquote>
<blockquote>
<p>&#x3010;4&#x3011; &#x6CE8;&#x610F;&#xFF1A;&#x811A;&#x672C;&#x8FD0;&#x884C;&#x51FD;&#x6570;&#x9700;&#x8981;&#x5728;&#x5BF9;&#x5E94;&#x6A21;&#x5757;&#x5BFC;&#x5165;&#x524D;&#x6267;&#x884C;</p>
</blockquote>
</blockquote>
<h3 class="mume-header" id="httpserver-v20">HTTPServer v2.0</h3>

<p><em><strong>day12/http_server.py</strong></em></p>
<ol>
<li>
<p>&#x4E3B;&#x8981;&#x529F;&#x80FD; &#xFF1A;<br>
&#x3010;1&#x3011; &#x63A5;&#x6536;&#x5BA2;&#x6237;&#x7AEF;&#xFF08;&#x6D4F;&#x89C8;&#x5668;&#xFF09;&#x8BF7;&#x6C42;<br>
&#x3010;2&#x3011; &#x89E3;&#x6790;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x7684;&#x8BF7;&#x6C42;<br>
&#x3010;3&#x3011; &#x6839;&#x636E;&#x8BF7;&#x6C42;&#x7EC4;&#x7EC7;&#x6570;&#x636E;&#x5185;&#x5BB9;<br>
&#x3010;4&#x3011; &#x5C06;&#x6570;&#x636E;&#x5185;&#x5BB9;&#x5F62;&#x6210;http&#x54CD;&#x5E94;&#x683C;&#x5F0F;&#x8FD4;&#x56DE;&#x7ED9;&#x6D4F;&#x89C8;&#x5668;</p>
</li>
<li>
<p>&#x5347;&#x7EA7;&#x70B9; &#xFF1A;<br>
&#x3010;1&#x3011; &#x91C7;&#x7528;IO&#x5E76;&#x53D1;&#xFF0C;&#x53EF;&#x4EE5;&#x6EE1;&#x8DB3;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x540C;&#x65F6;&#x53D1;&#x8D77;&#x8BF7;&#x6C42;&#x60C5;&#x51B5;<br>
&#x3010;2&#x3011; &#x505A;&#x57FA;&#x672C;&#x7684;&#x8BF7;&#x6C42;&#x89E3;&#x6790;&#xFF0C;&#x6839;&#x636E;&#x5177;&#x4F53;&#x8BF7;&#x6C42;&#x8FD4;&#x56DE;&#x5177;&#x4F53;&#x5185;&#x5BB9;&#xFF0C;&#x540C;&#x65F6;&#x6EE1;&#x8DB3;&#x5BA2;&#x6237;&#x7AEF;&#x7B80;&#x5355;&#x7684;&#x975E;&#x7F51;&#x9875;&#x8BF7;&#x6C42;&#x60C5;&#x51B5;</p>
</li>
</ol>
<pre class="language-text">&#x3010;3&#x3011; &#x901A;&#x8FC7;&#x7C7B;&#x63A5;&#x53E3;&#x5F62;&#x5F0F;&#x8FDB;&#x884C;&#x529F;&#x80FD;&#x5C01;&#x88C5;
</pre>

      </div>
      
      
    
    
    
    
    
    
    
    
  
    </body></html>